-- phpMyAdmin SQL Dump
-- version 4.8.5
-- https://www.phpmyadmin.net/
--
-- Anamakine: 127.0.0.1
-- Üretim Zamanı: 08 Ağu 2019, 12:46:29
-- Sunucu sürümü: 10.1.38-MariaDB
-- PHP Sürümü: 7.3.4

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Veritabanı: `blog-codeigniter`
--

-- --------------------------------------------------------

--
-- Tablo için tablo yapısı `kategoriler`
--

CREATE TABLE `kategoriler` (
  `kategori_id` int(11) NOT NULL,
  `kategori_baslik` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `kategori_url` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `kategori_resim` varchar(500) COLLATE utf8_unicode_ci NOT NULL,
  `kategori_created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `kategori_sira` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Tablo döküm verisi `kategoriler`
--

INSERT INTO `kategoriler` (`kategori_id`, `kategori_baslik`, `kategori_url`, `kategori_resim`, `kategori_created_at`, `kategori_sira`) VALUES
(1, 'LARAVEL', 'laravel', 'LARAVEL.png', '2018-11-19 14:13:04', 0),
(2, 'Codeigniter', 'codeigniter', 'codeigniter.png', '2018-11-19 14:13:04', 1);

-- --------------------------------------------------------

--
-- Tablo için tablo yapısı `users`
--

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `register_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Tablo döküm verisi `users`
--

INSERT INTO `users` (`id`, `name`, `email`, `password`, `register_date`) VALUES
(4, 'Lorem Ipsum', 'lorem@ipsum.com', 'd2e16e6ef52a45b7468f1da56bba1953', '2018-11-17 14:36:26');

-- --------------------------------------------------------

--
-- Tablo için tablo yapısı `yazilar`
--

CREATE TABLE `yazilar` (
  `yazi_id` int(11) NOT NULL,
  `yazi_baslik` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `yazi_url` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `yazi_icerik` text COLLATE utf8_unicode_ci NOT NULL,
  `yazi_created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `kategori_id` int(11) NOT NULL,
  `yazi_sira` int(11) NOT NULL,
  `yazi_etiketler` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `yazi_onecikan` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Tablo döküm verisi `yazilar`
--

INSERT INTO `yazilar` (`yazi_id`, `yazi_baslik`, `yazi_url`, `yazi_icerik`, `yazi_created_at`, `kategori_id`, `yazi_sira`, `yazi_etiketler`, `yazi_onecikan`) VALUES
(1, 'Laravel Nedir?', 'laravel_nedir_', '<p>Laravel, PHP dili ile yazılmış, g&uuml;&ccedil;l&uuml; bir frameworkd&uuml;r. Taylor Otwell &ouml;nderliğinde geliştirmektedir.&nbsp; S&ouml;z dizimi basit ve anlamlıdır. Bu sebeple &ouml;ğrenmesi daha kolaydır. Laravel i&ccedil;inde bir&ccedil;ok yapıyı ve &ouml;zelliği barındırır. Bunun sonucunda basit web uygulamalarında ya da karmaşık web sayfalarında rahatlıkla kullanılabilir. Laravel&rsquo;in sloganı &ldquo;<strong>The PHP Framework For Web Artisans</strong>&rdquo; yani &ldquo;Web sanat&ccedil;ılarının PHP Framework&uuml;d&uuml;r.</p>\r\n\r\n<p>Laravel, profesyonel ya da amat&ouml;r web geliştiricileri tarafından kullanılabilir. OOP yapısı sebebiyle daha derli toplu, temiz, okunabilir kod yazılmasına olanak sağlar.</p>\r\n\r\n<p>Laravel ile geliştirme yapmaya başlamak i&ccedil;in, HTML/CSS bilgisine ve orta seviye PHP bilgisine ihtiya&ccedil; vardır.&nbsp;</p>\r\n\r\n<h3><strong>&Ouml;nemli Bilgiler</strong></h3>\r\n\r\n<ol>\r\n	<li>Bağımlılık y&ouml;neticisi (Dependency Manager) olarak&nbsp;<a href=\"https://tr.wikipedia.org/wiki/Composer\" rel=\"nofollow\" target=\"_blank\"><strong>Composer</strong></a>&nbsp;kullanır.</li>\r\n	<li>İ&ccedil;inde&nbsp;<a href=\"https://laravel.com/docs/5.4/eloquent\" rel=\"nofollow\" target=\"_blank\"><strong>Eloquent ORM</strong></a>&nbsp;(Object Relational Mapping)&rsquo;yi barındırır. Bu yapıda veritabanındaki her bir tabloya karşılık gelen bir model sınıfı bulunur. Bu sayede uzun sorgu c&uuml;mleleri yerine &ccedil;ok daha basit şekilde veritabanı sorguları yapmanızı sağlar. Ayrıca farklı veritabanlarından (Mysql, PostgreSql, MongoDB vb.) sorgularınızda değişiklik yapmadan sorgu yapabilme imk&acirc;nı sunar.</li>\r\n	<li>Template engine olarak &ldquo;<a href=\"https://laravel.com/docs/5.4/blade#introduction\" rel=\"nofollow\" target=\"_blank\"><strong>Blade</strong></a>&rdquo; kullanmaktadır. MVC(Model, View, Controller) mimarisinde View (V) kısmında denk gelmektedir. Bu yapı sayesinde php ve html kodlarımızı birbirinden ayırma imkanı sağlar.</li>\r\n	<li>Gelişmiş&nbsp;<strong>routing</strong>&nbsp;yapısı sayesinde URL yapınızı hızlı ve kolay bir şekilde filtreleyebilir, controllera y&ouml;nlendirebilirsiniz.</li>\r\n	<li>Laravelin i&ccedil;erisinde kimlik doğrulama (<strong>Authentication</strong>) yapısı hazır olarak bulunmaktadır. Sadece birka&ccedil; komut yardımıyla <em>login/logout/register </em>gibi kullanıcı işlemleri uygulamanıza dahil edilebilir.</li>\r\n	<li>Sadece birka&ccedil; satır kod ile verileri otomatik sayfalama (<strong>Pagination</strong>) &ouml;zelliği bulunmaktadır.</li>\r\n	<li>Form ve veri girişi kısımlarında b&uuml;t&uuml;nleşik&nbsp;<a href=\"https://tr.wikipedia.org/wiki/XSRF\" rel=\"nofollow\" target=\"_blank\"><strong>CSRF</strong></a>&nbsp;koruması bulunmaktadır.</li>\r\n	<li>Migration ve seeder yapısıyla veritabanında tablo oluşturma, versiyonlama ve veri girişi işlemleri daha basit şekilde y&ouml;netilebilir.</li>\r\n	<li>Yapısında bir&ccedil;ok &ldquo;<a href=\"https://symfony.com/\" rel=\"nofollow\" target=\"_blank\"><strong>symfony framework</strong></a>&rdquo; bileşenini barındırmaktadır. Ama Laravel &ouml;ğrenmemiz i&ccedil;in bizim symfony framework bilmemize gerek yoktur.</li>\r\n</ol>\r\n\r\n<h3><strong>Laravel i&ccedil;in sunucu gereklilikleri nelerdir?</strong></h3>\r\n\r\n<ol>\r\n	<li>PHP &gt;= 5.6.4</li>\r\n	<li>OpenSSL PHP Extension</li>\r\n	<li>PDO PHP Extension</li>\r\n	<li>Mbstring PHP Extension</li>\r\n	<li>Tokenizer PHP Extension</li>\r\n	<li>XML PHP Extension</li>\r\n</ol>\r\n\r\n<p>Belirli bir PHP versiyonuna ve belirli mod&uuml;llere ihtiyacımız bulunmaktadır.&nbsp;Peki, biz bu gereklilikleri nasıl sağlayacağız?</p>\r\n\r\n<ol>\r\n	<li>Bunun i&ccedil;in &ldquo;<a href=\"https://laravel.com/docs/5.4/homestead\" rel=\"noopener nofollow\" target=\"_blank\">Laravel Homestead</a>&rdquo; kullanabilirsiniz. Bu hepsi bir arada (all in one) bir &ccedil;&ouml;z&uuml;md&uuml;r.</li>\r\n	<li>PHP&rsquo;yi kendiniz kurabilirsiniz.</li>\r\n	<li>Wamp/Xammp gibi bir &ccedil;&ouml;z&uuml;m kullanabilirsiniz.</li>\r\n</ol>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<hr />\r\n<h2><strong>Laravel Eğitim Serisi</strong></h2>\r\n\r\n<ul>\r\n	<li>\r\n	<p><a href=\"http://blog.senocak.tk/yazi/laravel_kurulumu\" target=\"_blank\">Laravel Kurulumu</a></p>\r\n	</li>\r\n	<li>\r\n	<p><a href=\"http://blog.senocak.tk/yazi/laravel_uygulama_yapisi\" target=\"_blank\">Laravel Uygulama Yapısı</a></p>\r\n	</li>\r\n	<li>\r\n	<p><a href=\"http://blog.senocak.tk/yazi/laravel_konfigurasyonu\" target=\"_blank\">Laravel Konfig&uuml;rasyonu</a></p>\r\n	</li>\r\n	<li>\r\n	<p><a href=\"http://blog.senocak.tk/yazi/laravel_route_sistemi\" target=\"_blank\">Laravel Route Sistemi</a></p>\r\n	</li>\r\n	<li>\r\n	<p><a href=\"http://blog.senocak.tk/yazi/laravel_controller_yapisi\" target=\"_blank\">Laravel Controller Yapısı</a></p>\r\n	</li>\r\n	<li>\r\n	<p><a href=\"http://blog.senocak.tk/yazi/laravel_controller_veri_aktarimi\" target=\"_blank\">Laravel Controller Veri Aktarımı</a></p>\r\n	</li>\r\n	<li>\r\n	<p><a href=\"http://blog.senocak.tk/yazi/laravel_blade_templates\" target=\"_blank\">Laravel Blade Templates</a></p>\r\n	</li>\r\n	<li>\r\n	<p><a href=\"http://blog.senocak.tk/yazi/laravel_model_yapisi\" target=\"_blank\">Laravel Model Yapısı</a></p>\r\n	</li>\r\n</ul>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<p>Ref:&nbsp;<a href=\"https://www.mobilhanem.com/laravel-dersleri-laravel-nedir/\" target=\"_blank\">laravel-dersleri</a></p>\r\n', '2018-09-27 02:16:33', 1, 1, 'laravel,php,mvc', 0),
(2, 'Temiz Kod Yazımı', 'temiz_kod_yazimi', '<h3><strong>Mantıklı ve anlamlı değişken isimleri kullanın.</strong></h3>\r\n\r\n<pre>\r\n<code class=\"language-php\">$ymdstr = $moment-&gt;format(\'y-m-d\');</code></pre>\r\n\r\n<p>yerine,</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$currentDate = $moment-&gt;format(\'y-m-d\');</code></pre>\r\n\r\n<h3><strong>Aynı değişken t&uuml;rleri i&ccedil;in aynı kelime hazinesi kullanın.</strong></h3>\r\n\r\n<pre>\r\n<code class=\"language-php\">getUserInfo();\r\ngetUserData();\r\ngetUserRecord();\r\ngetUserProfile();</code></pre>\r\n\r\n<ol>\r\n</ol>\r\n\r\n<p>yerine,</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">getUser();</code></pre>\r\n\r\n<h3><strong>Aranabilen isimler kullanın.</strong></h3>\r\n\r\n<pre>\r\n<code class=\"language-php\">$result = $serializer-&gt;serialize($data, 448); // What the heck is 448 for?</code></pre>\r\n\r\n<p>yerine,</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$json = $serializer-&gt;serialize($data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);</code></pre>\r\n\r\n<p>-----</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">if ($user-&gt;access &amp; 4) {\r\n    // What the heck is 4 for?\r\n}</code></pre>\r\n\r\n<p>yerine,</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">class User{\r\n    const ACCESS_READ = 1;\r\n    const ACCESS_CREATE = 2;\r\n    const ACCESS_UPDATE = 4;\r\n    const ACCESS_DELETE = 8;\r\n}\r\nif ($user-&gt;access &amp; User::ACCESS_UPDATE) {\r\n    // do edit ...\r\n}</code></pre>\r\n\r\n<h3><strong>Gereksiz i&ccedil;erikleri ekleme.</strong></h3>\r\n\r\n<pre>\r\n<code class=\"language-php\">&lt;?php\r\nclass Car{\r\n    public $carMake;\r\n    public $carModel;\r\n    public $carColor;\r\n\r\n    //...\r\n}\r\n</code></pre>\r\n\r\n<h4>yerine,</h4>\r\n\r\n<pre>\r\n<code class=\"language-php\">&lt;?php\r\nclass Car{\r\n    public $make;\r\n    public $model;\r\n    public $color;\r\n\r\n    //...\r\n}\r\n</code></pre>\r\n\r\n<h3><strong>2 veya daha az fonksiyon parametresi kullanın.</strong></h3>\r\n\r\n<pre>\r\n<code class=\"language-php\">&lt;?php\r\nfunction createMenu($title, $body, $buttonText, $cancellable) {\r\n    // ...\r\n}\r\n</code></pre>\r\n\r\n<h4>yerine,</h4>\r\n\r\n<pre>\r\n<code class=\"language-php\">&lt;?php\r\nclass MenuConfig{\r\n    public $title;\r\n    public $body;\r\n    public $buttonText;\r\n    public $cancellable = false;\r\n}\r\n\r\n$config = new MenuConfig();\r\n$config-&gt;title = \'Foo\';\r\n$config-&gt;body = \'Bar\';\r\n$config-&gt;buttonText = \'Baz\';\r\n$config-&gt;cancellable = true;\r\n\r\nfunction createMenu(MenuConfig $config) {\r\n    // ...\r\n}\r\n</code></pre>\r\n\r\n<h3><strong>Fonksiyonalr tek birşey olmalıdır.</strong></h3>\r\n\r\n<pre>\r\n<code class=\"language-php\">&lt;?php\r\nfunction emailClients($clients) {\r\n    foreach ($clients as $client) {\r\n        $clientRecord = $db-&gt;find($client);\r\n        if ($clientRecord-&gt;isActive()) {\r\n            email($client);\r\n        }\r\n    }\r\n}\r\n</code></pre>\r\n\r\n<h4>yerine,</h4>\r\n\r\n<pre>\r\n<code class=\"language-php\">function emailClients($clients) {\r\n    $activeClients = activeClients($clients);\r\n    array_walk($activeClients, \'email\');\r\n}\r\n\r\nfunction activeClients($clients) {\r\n    return array_filter($clients, \'isClientActive\');\r\n}\r\n\r\nfunction isClientActive($client) {\r\n    $clientRecord = $db-&gt;find($client);\r\n    return $clientRecord-&gt;isActive();\r\n}\r\n</code></pre>\r\n\r\n<p>Daha fazla detay ve i&ccedil;erik i&ccedil;in;&nbsp;<a href=\"https://github.com/jupeter/clean-code-php/blob/master/README.md\" target=\"_blank\">clean-code</a></p>\r\n', '2018-10-15 02:18:40', 1, 11, '', 0),
(3, 'Laravel Kurulumu', 'laravel_kurulumu', '<ul>\r\n	<li><a href=\"https://www.apachefriends.org/tr/index.html\" target=\"_blank\">XAMPP</a> veya <a href=\"http://www.wampserver.com/en/\" target=\"_blank\">WAMP</a> kurulumunu ger&ccedil;ekleştiriyoruz<a href=\"https://www.mobilhanem.com/wamp-server-kurulumu-ve-merhaba-dunya/\" rel=\"noopener\" target=\"_blank\">.</a></li>\r\n	<li><a href=\"https://getcomposer.org/download/\" target=\"_blank\">Composer</a>&#39;i kuruyoruz.</li>\r\n	<li><a href=\"https://laravel.com/\" target=\"_blank\">Laravel</a>&#39;i kuruyoruz.</li>\r\n</ul>\r\n\r\n<p>&Ouml;ncelikle Laravel&rsquo;i kurmak istediğiniz dizine ge&ccedil;ip aşağıdaki kodlardan dilediğimizi &ccedil;alıştırıyoruz.</p>\r\n\r\n<ul>\r\n	<li>\r\n	<pre>\r\n<code class=\"language-bash\">cd c:\\wamp\\www</code></pre>\r\n	</li>\r\n</ul>\r\n\r\n<p>Dizine ge&ccedil;iyoruz.</p>\r\n\r\n<ul>\r\n	<li>\r\n	<pre>\r\n<code class=\"language-bash\">composer create-project --prefer-dist laravel/laravel proje_ismi</code></pre>\r\n	</li>\r\n</ul>\r\n\r\n<p>Proje&#39;yi oluşturduğumuz dizine ge&ccedil;iyoruz.</p>\r\n\r\n<ul>\r\n	<li>\r\n	<pre>\r\n<code class=\"language-bash\">cd proje_ismi</code></pre>\r\n	</li>\r\n</ul>\r\n\r\n<p>Laravel projemizi &ccedil;alıştırıyoruz.</p>\r\n\r\n<ul>\r\n	<li>\r\n	<pre>\r\n<code class=\"language-bash\">php artisan serve</code></pre>\r\n	</li>\r\n</ul>\r\n\r\n<p><a href=\"http://127.0.0.1:8000/\" rel=\"nofollow\">http://127.0.0.1:8000/</a>&nbsp;adresinden kurmuş olduğumuz Laravel&rsquo;e ulaşabiliyoruz.</p>\r\n\r\n<p><img alt=\"\" src=\"/upload/images/laravel-development-environment-1024x481.jpg\" style=\"height:423px; width:900px\" /></p>\r\n\r\n<ul>\r\n</ul>\r\n\r\n<p>Ref:&nbsp;<a href=\"https://www.mobilhanem.com/laravel-dersleri-laravel-nedir/\" target=\"_blank\">laravel-dersleri</a></p>\r\n', '2018-10-15 02:18:40', 1, 10, '', 0),
(4, 'Laravel Uygulama Yapısı', 'laravel_uygulama_yapisi', '<h3><strong>Laravel Anadizin Yapısı</strong></h3>\r\n\r\n<ul>\r\n	<li><strong>app:&nbsp;</strong>Bu klas&ouml;r i&ccedil;erisinde uygulamanın asıl kodları bulunacaktır.</li>\r\n	<li><strong>bootstrap:&nbsp;</strong>Uygulamanın autoload ve cache (&ouml;nbellek) kısımlarını barındırmaktadır.</li>\r\n	<li><strong>config:&nbsp;</strong>Uygulamanın ayar dosyaları bu klas&ouml;rde bulunmaktadır.</li>\r\n	<li><strong>database:&nbsp;</strong>Veritabanı operasyonları i&ccedil;in kullanılan &ldquo;Seeds&rdquo; ve &ldquo;Migrations&rdquo; bu klas&ouml;rde bulunmaktadır.</li>\r\n	<li><strong>public:&nbsp;</strong>Bu klas&ouml;r uygulamanın &ldquo;document root&rdquo; kısmıdır. Laravel&rsquo;in &ccedil;alışmasını başlatır ayrıca &ldquo;Assets&rdquo; (Javascrip, CSS, Resimler vb.) kısmını barındırır.</li>\r\n	<li><strong>resources:&nbsp;</strong>Bu klas&ouml;rde herhangi bir işlem yapılmamış (Sıkıştırma, Birleştirme, Gizleme vs) dosyalar, view (g&ouml;r&uuml;n&uuml;m) dosyaları ve dil dosyaları bulunmaktadır.</li>\r\n	<li><strong>storage:&nbsp;</strong>Bu klas&ouml;r uygulamanın depolama alanıdır. İ&ccedil;erisinde, dosya y&uuml;klemelerini, &ouml;nbellekleme (cache) dosyalarını ve uygulamanın log dosyalarını barındırır.</li>\r\n	<li><strong>tests:&nbsp;</strong>Bu klas&ouml;r test dosyalarını barındırır.</li>\r\n	<li><strong>vendor:&nbsp;</strong>Bu klas&ouml;rde uygulamanın &ldquo;Composer Dependencies&rdquo; (paket bağımlılıkları) bulunmaktadır.</li>\r\n</ul>\r\n\r\n<h3><strong>Laravel App Klas&ouml;r&uuml; Yapısı</strong></h3>\r\n\r\n<p>Uygulamamızın ana klas&ouml;r&uuml; burasıdır diyebiliriz. Ayrıca i&ccedil;erisinde bir&ccedil;ok ek klas&ouml;r bulunmaktadır.</p>\r\n\r\n<ul>\r\n	<li><strong>Console:</strong>&nbsp;T&uuml;m &ldquo;artisan&rdquo; komutları bu klas&ouml;rde bulunmaktadır.</li>\r\n	<li><strong>Http:</strong>&nbsp;&ldquo;Controllers&rdquo;, &ldquo;Middleware&rdquo;, &ldquo;Request&rdquo; bu klas&ouml;rde bulunmaktadır.</li>\r\n	<li><strong>Exceptions:</strong>&nbsp;&Ouml;zel &ldquo;Exception Handlers&rdquo; bu klas&ouml;rde bulunmaktadır.</li>\r\n	<li><strong>Providers:&nbsp;</strong>&nbsp;&ldquo;Providers&rdquo; (Servis Sağlayıcılar) bu klas&ouml;rde bulunmaktadır.</li>\r\n</ul>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<p>Ref:&nbsp;<a href=\"https://www.mobilhanem.com/laravel-dersleri-laravel-nedir/\" target=\"_blank\">laravel-dersleri</a></p>\r\n', '2018-09-27 05:29:21', 1, 9, '', 0),
(5, 'Laravel Konfigürasyonu', 'laravel_konfigurasyonu', '<p>&Ouml;ncelikle, Laravel kurulumundan sonra yapmamız gereken birka&ccedil; kontrol ve işlem bulunmaktadır.</p>\r\n\r\n<ol>\r\n	<li>Ana dizinde bulunan &ldquo;<em>storage</em>&rdquo; ve &ldquo;<em>bootstrap/cache</em>&rdquo; klas&ouml;rlerinin yazma izni kontrol&uuml; yapılmadır, yazma izni yoksa yazma izni verilmelidir.</li>\r\n	<li>&ldquo;<strong>php artisan key:generate</strong>&rdquo; komutu ile uygulama anahtarı oluşturulmalıdır. Bu anahtar session ve diğer şifrelenmiş verilerin g&uuml;venliğinde kullanılacaktır.</li>\r\n	<li>Ana dizinde &ldquo;<em>.env</em>&rdquo; dosyası olup olmadığı kontrol&uuml; yapılmadır. Bu dosya composer ile kurulumda yada &ldquo;<strong>php artisan key:generate</strong>&rdquo; komutuyla otomatik olarak oluşmalıdır. Eğer yoksa &ldquo;<em>.env.example</em>&rdquo; dosyasının adı &ldquo;<em>.env</em>&rdquo; yapılıp, &ldquo;<strong>php artisan key:generate</strong>&rdquo; komutu tekrar &ccedil;alıştırılmalıdır.</li>\r\n</ol>\r\n\r\n<blockquote>\r\n<p>&ldquo;<em><strong>.env</strong></em>&rdquo; dosyası&nbsp;geliştirme ortamımız ile ilgili değişkenleri i&ccedil;ermektedir. Bu dosyanın i&ccedil;eriğine ayrıntılı olarak değineceğiz.</p>\r\n</blockquote>\r\n\r\n<h3><strong>Konfig&uuml;rasyon Dosyaları&nbsp; ve Geliştirme Ortamı Konfig&uuml;rasyonu</strong></h3>\r\n\r\n<p>Bu kontrolleri yaptıktan sonra projemizin ana dizini altında &ldquo;<strong>config</strong>&rdquo; dizini altındaki bir&ccedil;ok yapılandırma dosyasına g&ouml;z atabiliriz.</p>\r\n\r\n<ul>\r\n	<li><strong>app.php</strong>: Bu dosyada uygulamamız ile ilgili ayarlar bulunmaktadır. (Uygulama adı, adresi, debug durumu, dil ve timezone gibi ayarlar bulunmaktadır.)</li>\r\n	<li><strong>database.php</strong>: Veritabanı ile ilgili ayarlar bulunmaktadır. (Varsayılan veritabanı bağlantı t&uuml;r&uuml;, desteklenen veritabanı bağlantı bilgileri vb. ayarlar bulunmaktadır. )</li>\r\n</ul>\r\n\r\n<p>database.php i&ccedil;eriği:</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">\'connections\' =&gt; [\r\n\r\n        \'sqlite\' =&gt; [\r\n            \'driver\' =&gt; \'sqlite\',\r\n            \'database\' =&gt; env(\'DB_DATABASE\', database_path(\'database.sqlite\')),\r\n            \'prefix\' =&gt; \'\',\r\n        ],\r\n\r\n        \'mysql\' =&gt; [\r\n            \'driver\' =&gt; \'mysql\',\r\n            \'host\' =&gt; env(\'DB_HOST\', \'127.0.0.1\'),\r\n            \'port\' =&gt; env(\'DB_PORT\', \'3306\'),\r\n            \'database\' =&gt; env(\'DB_DATABASE\', \'forge\'),\r\n            \'username\' =&gt; env(\'DB_USERNAME\', \'forge\'),\r\n            \'password\' =&gt; env(\'DB_PASSWORD\', \'\'),\r\n            \'unix_socket\' =&gt; env(\'DB_SOCKET\', \'\'),\r\n            \'charset\' =&gt; \'utf8mb4\',\r\n            \'collation\' =&gt; \'utf8mb4_unicode_ci\',\r\n            \'prefix\' =&gt; \'\',\r\n            \'strict\' =&gt; true,\r\n            \'engine\' =&gt; null,\r\n        ],\r\n\r\n    ],</code></pre>\r\n\r\n<p><img alt=\"\" src=\"https://www.mobilhanem.com/wp-content/uploads/2017/07/laravel-database-configi.png\" style=\"height:486px; width:597px\" /></p>\r\n\r\n<p>Bu kısımda &ouml;rnek olarak ele aldığımız <strong>database.php</strong> i&ccedil;erisinde&nbsp;&ldquo;<strong><em>env</em></strong>&rdquo; fonksiyonunun kullanıldığını g&ouml;rmekteyiz. &quot;<strong>.env</strong>&quot; dosyası geliştirme ortamımızın konfig&uuml;rasyon bilgilerini tek bir yerden y&ouml;netmemizi sağlar.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">env(\'.env dosyasındaki parametre adı\', \'varsayılan değer\')</code></pre>\r\n\r\n<p>Birden &ccedil;ok geliştirme ortamı olması durumunda, .env.testing, .env.production, .env.local gibi ayarlamalar yapılabilir.</p>\r\n\r\n<h3><strong>Bakım Modu (maintenance mode)</strong></h3>\r\n\r\n<p>Son olarak Laravel de&nbsp;<strong>bakım modu</strong>ndan (<strong>maintenance mode</strong>)&nbsp; da bahsedelim.</p>\r\n\r\n<p>Bakım modu aktif edildiğinde, sitenize gelen ziyaret&ccedil;iler bakım modu ekranını g&ouml;r&uuml;rler. Bu s&uuml;re&ccedil;te sitenizde herhangi bir işlem yapılamaz. Siz de gerekli gerekli g&uuml;ncelleme veya geliştirmeleri sitenize uygulayabilirsiniz.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">php artisan down</code></pre>\r\n\r\n<p>komutuyla aktif edilir.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">php artisan up</code></pre>\r\n\r\n<p>komutuyla inaktif edilir.</p>\r\n\r\n<p>Ayrıntılı mesaj vermek ve belirli s&uuml;relerde ziyaret&ccedil;inin otomatik deneme yapmasını isterseniz,</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">php artisan down --message=\"Veritabanı güncelleniyor.\" --retry=60</code></pre>\r\n\r\n<p><img alt=\"\" src=\"https://www.mobilhanem.com/wp-content/uploads/2017/07/laravel-bakim-modu.png\" style=\"height:410px; width:900px\" /></p>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<p>Ref:&nbsp;<a href=\"https://www.mobilhanem.com/laravel-dersleri-laravel-nedir/\" target=\"_blank\">laravel-dersleri</a></p>\r\n', '2018-09-27 06:59:56', 1, 8, '', 0),
(6, 'Laravel Route Sistemi', 'laravel_route_sistemi', '<p>Laravel kurulum dizininde yer alan &lsquo;routes/web.php&rsquo; dosyasını a&ccedil;ıyoruz.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">Route::get(\'/\', function () {\r\n    return view(\'welcome\');\r\n});</code></pre>\r\n\r\n<p>Bu kod, sitenizin giriş ekranı yani &lsquo;/&rsquo; i&ccedil;in &lsquo;<em><strong>welcome</strong></em>&rsquo;&nbsp;<strong><em>View&nbsp;</em></strong>dosyasının &ccedil;alışacağını belirtir. Burada yer alan &lsquo;<strong>Route::get&hellip;</strong>&rsquo; b&ouml;l&uuml;m&uuml; ise isteğin geldiği methodu belirtir. Kullanabileceğimiz methodlar;</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">Route::get($url, $callback);\r\nRoute::post($url, $callback);\r\nRoute::put($url, $callback);\r\nRoute::patch($url, $callback);\r\nRoute::delete($url, $callback);\r\nRoute::options($url, $callback);</code></pre>\r\n\r\n<p>Burada &ouml;nemli bir not belirtmekte fayda g&ouml;r&uuml;yorum. POST, PUT ve DELETE methodlarını &ccedil;ağırabilmek i&ccedil;in <em>CSRF </em>koruması yapmamız gerekli. &lsquo;<strong>$url</strong>&rsquo; gelen internet sitenizin adresi, &lsquo;<strong>$callback</strong>&rsquo; ise &ccedil;alışacak fonksiyonu belirtiyor. İlk &ouml;rneğimize bakarsak &ccedil;alışacak &lsquo;<strong>$url</strong>&rsquo; i&ccedil;in &lsquo;<strong>/</strong>&rsquo; girilmiş ve &lsquo;<strong>$callback</strong>&rsquo; i&ccedil;inse function ile başlayan b&ouml;l&uuml;m belirtilmiş. Burada fonksiyon ile beraber &lsquo;<strong>View</strong>&lsquo; &ccedil;alışması sağlanmış.&nbsp;Route ile&nbsp;<strong>Controller</strong>&nbsp;&ccedil;ağırmak i&ccedil;in aşağıdaki gibi bir kod gereklidir.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">Route::get(\'kullanici/profil\', \'UserController@uyeGoster\');</code></pre>\r\n\r\n<p>G&ouml;rd&uuml;ğ&uuml;n&uuml;z bile kullanılacak&nbsp;<strong>Controller</strong>&nbsp;&ccedil;ağırmak i&ccedil;in &lsquo;<u><em>UserController@uyeGoster</em></u>&rsquo; kullanıyoruz. Bu değişkende ilk &ouml;nce&nbsp;<strong>Controller&nbsp;</strong>ismi daha sonrada fonksiyonun adı kullanılmalıdır.</p>\r\n\r\n<h2><strong>Laravel Route İsimlendirme</strong></h2>\r\n\r\n<p>Laravel route i&ccedil;in isimlendirme (<strong>Name</strong>) kullanımı sistem i&ccedil;erisinde route i&ccedil;in link verebilmeyi kolaylaştırmak i&ccedil;in yapılır.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">Route::get(\'kullanici/profil\', \'UserController@uyeGoster\')-&gt;name(\'profil\');</code></pre>\r\n\r\n<p>Yukarıdaki &ouml;rnekte bu route i&ccedil;in isimlendirme kullandık. Bu isimlendirmeyi laravel view i&ccedil;erisinde de şu şekilde kullanıyoruz;</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">route(\'profil\');</code></pre>\r\n\r\n<p>Bu sayede route i&ccedil;in gerekli link otomatik olarak oluşturulacaktır.</p>\r\n\r\n<h2><strong>Laravel Route Gruplandırma</strong></h2>\r\n\r\n<p>Gruplandırma&nbsp;<strong>middleware, namespace, prefix</strong>&nbsp;gibi bir&ccedil;ok route bağlantısı olan durumlar i&ccedil;in uygundur.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">Route::namespace(\'Admin\')-&gt;group(function () {\r\n      Route::get(\'yonetici\', \'UserController@yoneticiGoster\');\r\n});</code></pre>\r\n\r\n<p>Yukarıdaki &ouml;rnekte kullanılacak olan&nbsp;<strong>Controller</strong>&nbsp;dosyalarının &lsquo;<u>Admin</u>&rsquo; klas&ouml;r&uuml; altında olduğunu belirttik. Prefix i&ccedil;in de bir &ouml;rnek verelim.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">Route::prefix(\'admin\')-&gt;group(function () {\r\n    Route::get(\'yoneticiler\', \'UserController@yoneticiListele\');\r\n});</code></pre>\r\n\r\n<p>Bu &ouml;rnekte ise url adresinin ilk b&ouml;l&uuml;m&uuml;nde &lsquo;<em>admin</em>&rsquo; gelen bağlantıların yapılacaklarını belirttik. Daha kısa bir a&ccedil;ıklama ile buradaki route bilgisine ulaşmak i&ccedil;in gelen adresin &lsquo;admin/yoneticiler&rsquo; olması gereklidir.</p>\r\n\r\n<h2><strong>Laravel Route Parametre Kullanımı</strong></h2>\r\n\r\n<p>Route ile gelen parametreleri y&ouml;nlendirebiliriz. Bunun i&ccedil;in adresten alınabilecek parametreleri belirtmemiz gerekli.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">Route::get(\'yonetici/{id}\', \'UserController@yoneticiGoster\');</code></pre>\r\n\r\n<pre>\r\n<code class=\"language-php\">Route::get(\'yonetici/{id?}\', \'UserController@yoneticiGoster\');</code></pre>\r\n\r\n<p>Bu kodlar birbirininden tek farkı alttakinde yer alan &lsquo;?&rsquo;. &Ouml;nce soru işareti olmayanı a&ccedil;ıklayayım. Burada adresimiz &lsquo;/yonetici/1&rsquo; olarak gelmelidir. Bu &ouml;rnekte kullanılan &lsquo;1&rsquo; id yerine ge&ccedil;er ve kodun devamında yer alan&nbsp;<strong>Controller&nbsp;</strong>i&ccedil;erisinde kullanılacak bir parametre olarak g&ouml;nderilir. İkinci kod par&ccedil;asında ise soru işareti ile anlattığımız şey parametre olabilir ya da olmayabilir demektir. Yani ilk kod ile &lsquo;yonetici&rsquo; adresini &ccedil;alıştıramayız hata alırız ama ikinci kısım ile hem &lsquo;yonetici&rsquo; hem de &lsquo;yonetici/1&rsquo; adreslerini &ccedil;alıştırabiliriz. Bunun en yaygın &ouml;rneği olarak şu senaryoyu d&uuml;ş&uuml;nebiliriz. Bir y&ouml;netim panelinde kullanıcıları listeleyecek ve bu listeden se&ccedil;ilen kullanıcının detay bilgisini g&ouml;stereceksiniz. Bunun i&ccedil;in laravel route sistemini iki şekilde yapabilirsiniz.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">Route::get(\'kullanici\', \'UserController@yoneticiGoster\');\r\nRoute::get(\'kullanici/{id}\', \'UserController@yoneticiGoster\');</code></pre>\r\n\r\n<p>veya</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">Route::get(\'kullanici/{id?}\', \'UserController@yoneticiGoster\');</code></pre>\r\n\r\n<p>Tabi arada bir satır var gibi g&ouml;r&uuml;nse de oluşturacağınız sistem b&uuml;y&uuml;d&uuml;k&ccedil;e bu kullanımın yararını g&ouml;rebilirsiniz. Unutmamak gerekir ki sistemi temiz kod yani takip edilebilir/anlaşılır yazmak g&uuml;n&uuml;m&uuml;z d&uuml;nyasında son derece &ouml;nemlidir.</p>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<p>Ref:&nbsp;<a href=\"https://www.mobilhanem.com/laravel-dersleri-laravel-nedir/\" target=\"_blank\">laravel-dersleri</a></p>\r\n', '2018-10-15 02:18:40', 1, 7, '', 0),
(7, 'Laravel Controller Yapısı', 'laravel_controller_yapisi', '<h2><strong>Laravel Controller Nedir?</strong></h2>\r\n\r\n<p>Laravel Controller, MVC yapısında frontend ve backend arasında işlem g&ouml;ren katmandır. Bunu biraz a&ccedil;mak gerekirse; mesela kullanıcıların &ouml;ny&uuml;zde etkileşimde oldukları bir form(&uuml;ye giriş formu) ile bu formun veritabanında yapılacağı sorgular arasında işlem yapılan kısmıdır. Aslında bizim veritabanı işlemlerini ve/veya kullanıcıdan gelen verileri işleyeceğimiz b&ouml;l&uuml;md&uuml;r. Yaptığımız bu girişten sonra hemen Laravel Controller oluşturmaya başlayalım.</p>\r\n\r\n<h2><strong>Artisan Kullanarak Controller Oluşturma</strong></h2>\r\n\r\n<p>Bildiğiniz &uuml;zere Laravel sisteminde Artisan CLI (komut satırı aray&uuml;z&uuml;) bulunmaktadır. Bu aray&uuml;z bizi bir &ccedil;ok dertten kurtarır ve projelerimize hız kazandırır. Artisan aray&uuml;z&uuml;n&uuml; kullanarak Controller, Model, Migration oluşturabiliriz. Artisan ile Laravel Controller oluşturmak i&ccedil;in &ouml;ncelikle komut satırı yardımı ile sistemimizde Laravel yapısının y&uuml;kl&uuml; olduğu ana dizine erişiyoruz.</p>\r\n\r\n<pre>\r\n<code class=\"language-bash\">C:\\xampp\\htdocs\\proje_ismi</code></pre>\r\n\r\n<p>Daha sonra&nbsp;aşağıda yer alan kod bloğunu yazıyoruz(ya da kopyala yapıştır yapıyoruz).</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">php artisan make:controller AdminController</code></pre>\r\n\r\n<p>Bu kod satırında sonra bulunan &lsquo;<strong>AdminController</strong>&rsquo; bizim oluşturduğumuz Laravel Controller i&ccedil;in belirlediğimiz ad olacaktır.</p>\r\n\r\n<p><img alt=\"\" src=\"/upload/images/57/laravel-controller.jpg\" style=\"height:719px; width:800px\" /></p>\r\n\r\n<h2><strong>Laravel Controller</strong></h2>\r\n\r\n<p>Yazımın başında da belirttiğim gibi controller ile veritabanı işlemlerini yapabiliyoruz. Burada (belki daha &ouml;nceden de bildiğiniz)&nbsp;<strong>CRUD</strong>&nbsp;kavramından kısaca bahsetmem gerek.&nbsp;<strong>CRUD</strong>, ingilizce Create(Oluştur)-Read(Oku)-Update(G&uuml;ncelle)-Delete/Destroy(Sil) kelimelerinin baş harflerinden oluşmuş bir kısaltmadır aslında. Daha &ouml;nce kullandığımız artisan komutuna basit bir parametre ekleyerek&nbsp;<strong>CRUD</strong>&nbsp;i&ccedil;in gerekli t&uuml;m fonksiyonları oluşturabiliriz. Yine Laravel y&uuml;klediğimiz anadizine geliyor ve aşağıdaki gibi daha &ouml;nce yazdığımı kodun sonuna&nbsp;<strong>&ndash;resource</strong>&nbsp;ekliyoruz.(&Ouml;nceki &ouml;rneği &ccedil;alıştırdıysanız Controller adı farklı olmalıdır)</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">php artisan make:controller PageController --resource</code></pre>\r\n\r\n<p><img alt=\"\" src=\"/upload/images/57/laravel-controller(1).jpg\" style=\"height:767px; width:800px\" /></p>\r\n\r\n<h2><strong>Laravel Controller Resource</strong></h2>\r\n\r\n<p>İki ekran g&ouml;r&uuml;nt&uuml;s&uuml; arasındaki farkı g&ouml;rebilirsiniz. Temel olarak CRUD i&ccedil;in gerekli t&uuml;m fonksiyonları tek bir satır ile oluşturduk. Bu fonksiyonları bira daha a&ccedil;ıklamaya &ccedil;alışayım. PageController ın Sayfa(Page) işlemleri i&ccedil;in kullanıldığını varsayalım.</p>\r\n\r\n<ul>\r\n	<li><strong>index()</strong>&nbsp;-&gt; T&uuml;m sayfaları listeme i&ccedil;in kullanılan fonksiyon,</li>\r\n	<li><strong>create()</strong>&nbsp;-&gt; Yeni bir sayfa oluşturmak i&ccedil;in kullanılacak formu oluşturan fonksiyon</li>\r\n	<li><strong>store()</strong>&nbsp;-&gt; Yeni sayfanın veritabanına yazılmasını kontrol eden fonksiyon</li>\r\n	<li><strong>edit()</strong>&nbsp;-&gt; D&uuml;zenlenecek sayfanın formunu oluşturan fonksiyon</li>\r\n	<li><strong>update()</strong>&nbsp;-&gt; D&uuml;zenlenecek sayfanın işlemlerini yapan fonksiyon</li>\r\n	<li><strong>destroy()</strong>&nbsp;-&gt; Sayfayı yok eden&nbsp;&nbsp;silinmesi i&ccedil;in kullanılan fonksiyon</li>\r\n</ul>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<p>Ref:&nbsp;<a href=\"https://www.mobilhanem.com/laravel-dersleri-laravel-nedir/\" target=\"_blank\">laravel-dersleri</a></p>\r\n', '2018-10-15 02:18:40', 1, 6, '', 0),
(8, 'Laravel Controller Veri Aktarımı', 'laravel_controller_veri_aktarimi', '<h2><strong>Route ile Laravel Controller Veri Aktarımı</strong></h2>\r\n\r\n<p>Daha &ouml;nceki derslerde bahsettiğimiz gibi route Laravel yapısı i&ccedil;in gelen isteklerin y&ouml;nlendirildiği alanlardır. Yani route ile controller y&ouml;nlendirmesi yapabileceğimiz i&ccedil;in veri aktarımını da yapabilmemiz gerekli. Başka bir değişle; <strong>.htaccess</strong> ile yaptığımız php dosyalarına veri aktarımını route ile yapabiliyoruz.</p>\r\n\r\n<p><img alt=\"\" src=\"/upload/images/59/route-controller-veri-aktarimi-1024x535.jpg\" style=\"height:418px; width:800px\" /></p>\r\n\r\n<h2><strong>Laravel controller veri aktarımı</strong></h2>\r\n\r\n<p>Yukarıdaki ekran g&ouml;r&uuml;nt&uuml;s&uuml;nde sol b&ouml;l&uuml;m routes/web.php ve sağ b&ouml;l&uuml;mdeki g&ouml;rsel ise app/Http/Controllers/PageController.php. Sol tarafa dikkat ederseniz iki adet yeni route var. Bunlar arasındaki fark tek bir soru işaretidir. Bu soru işaretinin anlamı ise &ldquo;id&rdquo; değişkeni olabilir ya da olmayabilir olarak değerlendirilir. Yani</p>\r\n\r\n<ul>\r\n	<li>\r\n	<pre>\r\n<code class=\"language-php\">Route::get(\'sayfa/{id}\', \'PageController@index\');</code></pre>\r\n	</li>\r\n</ul>\r\n\r\n<p>olan kod satırı i&ccedil;in &ldquo;id&rdquo; mutlaka olmalıdır. Olmadığında route hatası alınacaktır. Fakat;</p>\r\n\r\n<ul>\r\n	<li>\r\n	<pre>\r\n<code class=\"language-php\">Route::get(\'sayfa/{id?}\', \'PageController@index\');</code></pre>\r\n	</li>\r\n</ul>\r\n\r\n<p>olan kod satısı i&ccedil;inse &ldquo;id&rdquo; değişkeni şart değildir. Bu şekildeki url adreslerini contoller fonksiyonunda ise değişken atayarak kullanıyoruz. Sağ tarafta bulunan index($id) fonksiyonu url adresinden gelen id yi controller i&ccedil;inde kullanılabilir duruma getiriyor.</p>\r\n\r\n<h2><strong>View ile Laravel Controller Veri Aktarımı</strong></h2>\r\n\r\n<p>Route ile gelen, controller i&ccedil;erisinde oluşturulan ve/ya veritabanı ile yapılan işlemler sonrası getirilen verilerin view tarafına ulaştırılmasıdır.</p>\r\n\r\n<p>Bu aşamada yukarıdaki ekran g&ouml;r&uuml;nt&uuml;s&uuml;n&uuml; baz aldığımızda page view&rsquo;a aktarmak i&ccedil;in;</p>\r\n\r\n<ul>\r\n	<li>\r\n	<pre>\r\n<code class=\"language-php\">return view(\'page\', compact(\'id\'));</code></pre>\r\n	</li>\r\n</ul>\r\n\r\n<p>ya da</p>\r\n\r\n<ul>\r\n	<li>\r\n	<pre>\r\n<code class=\"language-php\">return view(\'page\')-&gt;with(\'id\', $id);</code></pre>\r\n	</li>\r\n</ul>\r\n\r\n<p>Yukarıdaki kod blokları iki şekilde de aynı şekilde sonu&ccedil;lanır ve bu şekilde contorller ile view arasında veri aktarımını sağlamış oluruz. İlerki derslerde değinebilir ama yeri gelmişken view i&ccedil;erisinde bu değişkeni nasıl yazdırıldığından bahsetmek istiyorum. Blade dosyasında sadece yazdırmak i&ccedil;in</p>\r\n\r\n<ul>\r\n	<li>\r\n	<pre>\r\n<code class=\"language-php\">Gelen id: {{$id}}</code></pre>\r\n	</li>\r\n</ul>\r\n\r\n<p>kod bloğunu kullanabildiğimiz gibi</p>\r\n\r\n<ul>\r\n	<li>\r\n	<pre>\r\n<code class=\"language-php\">Gelen id: &lt;?php echo $id; ?&gt;</code></pre>\r\n	</li>\r\n</ul>\r\n\r\n<p>şeklinde de bildiğimiz php ile yazdırabiliriz.</p>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<p>Ref:&nbsp;<a href=\"https://www.mobilhanem.com/laravel-dersleri-laravel-nedir/\" target=\"_blank\">laravel-dersleri</a></p>\r\n', '2018-09-28 04:49:22', 1, 5, '', 0),
(9, 'Laravel Blade Templates', 'laravel_blade_templates', '<h2>Laravel Blade Templates</h2>\r\n\r\n<p>Blade aslında bir şablon sistemidir. İ&ccedil;erisine alışık olduğunu PHP kodlarını da yazabilmeniz bir &ccedil;ok yazılımcının Laravel &ouml;ğrenirken kendini rahat hissetmesini sağlamaktadır. Daha &ouml;nce PHP ile site ya da uygulama yazdıysanız &ouml;zellikle &uuml;st veya alt kısımlar i&ccedil;in tek bir dosya kullanıp, onu her sayfaya &lsquo;include&rsquo; ile &ccedil;ağırmışsınızdır. Bunun amacı t&uuml;m sitenizin &uuml;st kısmında yapacağınız değişikliğin tek tek her php dosyasında değil; tek bir yerden yapmanızı sağlamaktır. Laravel Blade Templates, i&ccedil;inse bu &ouml;zellik layouttur. PHP ile yaptığınız &lsquo;include&rsquo; durumundan farklı olarak burada bir ana şablon tanımlar ve diğer sayfaları bu şablonu &lsquo;extend&rsquo; ederek oluşturursunuz. Hemen bir şablon &ouml;rneği yazalım.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">&lt;!DOCTYPE html&gt;\r\n&lt;html lang=\"en\"&gt;\r\n&lt;head&gt;\r\n    &lt;title&gt;@yield(\'baslik\')&lt;/title&gt;\r\n&lt;/head&gt;\r\n&lt;body&gt;\r\n    @yield(\'icerik\')\r\n&lt;/body&gt;\r\n&lt;/html&gt;</code></pre>\r\n\r\n<p>Yukarıdaki şablona dikkat ederseniz &lsquo;title&rsquo; etiketleri arasında @yield(&lsquo;başlık&rsquo;) kodunu yerleştirdik. Bu oluşturacağımız diğer sayfalar ile bu b&ouml;l&uuml;m&uuml;n&uuml;n iletişimini sağlayacak olan kod kısmıdır. Şimdi de bir alt daha doğrusu genişletilmiş bir sayfa yazalım.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">@extends(\'sablon\')\r\n\r\n@section(\'baslik\', \'Sayfa Başlık\')\r\n\r\n@section(\'icerik\')\r\n\r\n    &lt;p&gt;Buraya içerik gelecek&lt;/p&gt;\r\n\r\n@endsection</code></pre>\r\n\r\n<p>Şablon sayfamızdaki değişkenlerle bir sayfa oluşturmak &ccedil;ok kolaylaştı. İhtiyacımız olan alanları ekleyip o alanları doldurmamız yeterli olacak. İlk satırda yer alan &lsquo;<strong>extends</strong>&rsquo; oluşturduğumuz alt sayfanın hangi &uuml;st sayfadan &ccedil;oğaltılacağını a&ccedil;ıklıyor. Daha sonrada sizin de g&ouml;receğiniz gibi baslik ve icerik i&ccedil;in gerekli alanları belirterek alt sayfanın verilerini bu alanlara yazdık. Bu şekilde alt sayfalar i&ccedil;in genel bir şablona sahip oluyoruz.</p>\r\n\r\n<h2><strong>Laravel Blade Templates D&ouml;ng&uuml;ler</strong></h2>\r\n\r\n<p>Yazılım dillerinde belki de en &ccedil;ok kullanılan terimlerdir d&ouml;ng&uuml;ler. Bu y&uuml;zden yazımda bu d&ouml;ng&uuml;lere değinmenin uygun olacağını d&uuml;ş&uuml;nd&uuml;m.</p>\r\n\r\n<p><img alt=\"\" src=\"/upload/images/60/laravel-blade-templates-1024x325.jpg\" style=\"height:286px; width:900px\" /></p>\r\n\r\n<h2><strong>Laravel Blade Templates Kullanımı</strong></h2>\r\n\r\n<p>&Uuml;stteki ekran g&ouml;r&uuml;nt&uuml;lerinde sol taraf blade ile sağ taraf ise d&uuml;z PHP ile yapılmıştır. &Ouml;zellikle sol b&ouml;l&uuml;mde se&ccedil;ili alanda &ouml;nemli bir nokta var. PHP kodlarının i&ccedil;erisine bir yazı yazdırmak istediğimizde ya PHP etiketlerini kapatmamız ya da &lsquo;echo&rsquo; kullanmamız gerekli. Fakat Laravel Blade Templates i&ccedil;in bu duruma gerek yok. D&ouml;ng&uuml;ler kendi satırlarında biter ve alt satıra indiğinizde artık orası HTML olarak okunur.</p>\r\n\r\n<p>Yine sol tarafta g&ouml;rebileceğiniz gibi değişkenler de &lsquo;<strong>{{</strong>&lsquo; ile &lsquo;<strong>}}</strong>&rsquo; arasına yazılarak kısaltılmış bir &lsquo;echo&rsquo; kullanılmış olunuyor. Kullanılan &ccedil;ift s&uuml;sl&uuml; parantezler XSS engellemen adına &lsquo;<strong>htmlspecialchars</strong>&rsquo; fonksiyonu kullanılmış hali ile gelmektedir. Yani HTML etiketleri bu değişkenden temizlenir. Siz eğer HTML etiketli halini kullanmak isterseniz &lsquo;<strong>{!!</strong>&rsquo; ile &lsquo;<strong>!!}</strong>&rsquo; arasına yazmalısınız değişkeninizi. Yine bir &ouml;rnek kod ile anlatmaya &ccedil;alışayım.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$x = \"&lt;p&gt;Buraya bir paragraf gelecek&lt;/p&gt;\";\r\n\r\n{{$x}} // çıktısı Buraya bir paragraf gelecek\r\n\r\n{!!$x!!} // çıktısı &lt;p&gt;Buraya bir paragraf gelecek&lt;/p&gt;</code></pre>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<p>Ref:&nbsp;<a href=\"https://www.mobilhanem.com/laravel-dersleri-laravel-nedir/\" target=\"_blank\">laravel-dersleri</a></p>\r\n', '2018-09-28 06:29:15', 1, 4, '', 0),
(10, 'Laravel Model Yapısı', 'Laravel-Model-Yapisi', '<p>Laravel Model, MVC yapısında veritabanı işlemlerinin yapıldığı b&ouml;l&uuml;md&uuml;r. Daha &ouml;nceki yazılarımdan birinde Controller yapısından bahsederken, backend işlemlerinin de Controller tarafından yapıldığından bahsetmiştim. Controller, Model aracılığı ile bu işlemleri yapmaktadır. Yani Model, veritabanı iletişiminden sorumlu kısımdır.</p>\r\n\r\n<p><strong>Artisan Kullanarak Model Oluşturma</strong></p>\r\n\r\n<p>Daha &ouml;nceki yazılarımda bahsettiğim gibi Laravel Artisan CLI bizim işimizi kolaylaştırmaktadır. Bu komut satırını &ouml;ğrenmenin hız kazanma adına yararı olduğunu d&uuml;ş&uuml;n&uuml;yorum. Artisan kullanarak Laravel Model oluşturmak i&ccedil;in &ouml;ncelikle komut satırı kullanarak Laravel ana dizine erişiyoruz. Benim bilgisayarım i&ccedil;in bu adres;</p>\r\n\r\n<pre>\r\n<code class=\"language-bash\">C:\\xampp\\htdocs\\proje_ismi&gt;</code></pre>\r\n\r\n<pre>\r\n<code class=\"language-php\">php artisan make:model Page</code></pre>\r\n\r\n<p>Yukarıda yer alan kod satırı sayesinde &lsquo;<strong>Page</strong>&rsquo; Model dosyasını oluşturuyoruz. Model oluşturma başarı ile sonu&ccedil;landıysa app klas&ouml;r&uuml;n&uuml;n altında Page isimli bir dosya olmuşması gereklidir.</p>\r\n\r\n<p><img alt=\"laravel model oluşturma\" src=\"/upload/images/62/laravel-model.jpg\" style=\"height:615px; width:800px\" /></p>\r\n\r\n<p>Tabi burada unutmamamız gereken Model ile kullanılacak veritabanı tablosununda olması. Bu işlem i&ccedil;in isterseniz manuel olarak bir tablo oluşturabilirsiniz ya da yine Artisan kullanarak Migration oluşturabilirsiniz.Hen&uuml;z Migration yapısından bahsetmediğimiz i&ccedil;in biz bu yazıda manuel olarak bir tablo oluşturalım. Veritabanı değişkenlerini .env dosyasından alacağız buradaki değişikliklerin yapılmış olmasına dikkat edelim.&nbsp;Yine kendi kurulumuma g&ouml;re benim .env dosyamdaki veritabanı ile ilgili kısım şu şekildedir;</p>\r\n\r\n<pre>\r\n<code class=\"language-bash\">DB_CONNECTION=mysql\r\nDB_HOST=127.0.0.1\r\nDB_PORT=3306\r\nDB_DATABASE=mobilhanem\r\nDB_USERNAME=root\r\nDB_PASSWORD=</code></pre>\r\n\r\n<p>tabi lokal bir kurulum olduğu i&ccedil;in şifre kısmı boş bırakılmıştır. Ger&ccedil;ek sunucuda bu b&ouml;l&uuml;m&uuml;n g&uuml;&ccedil;l&uuml; bir şifre ile dolu olması gereklidir. Phpmyadmin yardımı ile projemize bir veritabanı oluşturup i&ccedil;erisine pages tablosunu ekledim. Tablo yapısı ise</p>\r\n\r\n<pre>\r\n<code class=\"language-sql\">id =&gt; int 11, primary key, autoincrement\r\nbaslik =&gt; varchar 100\r\nicerik =&gt; text\r\naktif =&gt; int 1, default 0</code></pre>\r\n\r\n<p>Burada Laravel Model i&ccedil;in &ouml;nemli bir konuya dikkat etmeniz gerekmektedir. Oluşturduğunuz Model adı ile veritabanındaki tablo arasında bir ilişki vardır. Bu ilişki oluşturduğunuz tablonun, Model isminin k&uuml;&ccedil;&uuml;k harf ile başlayan ve İngilizce olarak &ccedil;oğul yapılmış hali olmasıdır.</p>\r\n\r\n<ul>\r\n	<li><strong>Page (model) =&gt; pages (tablo)</strong></li>\r\n	<li><strong>City (model) =&gt; cities (tablo)</strong></li>\r\n</ul>\r\n\r\n<p>Peki bu şart mı? tabi ki hayır fakat proje takip edilebilirliği ve hız bakımından tavsiye edilen methoddur. Diyelim ki siz bunu yapmak istemiyor veya daha &ouml;nceki projenizi Laravel yapısına taşımak istiyorsunuz. Tablo isminizi &lsquo;sayfalar&rsquo; olarak kullanmak i&ccedil;in Laravel Model i&ccedil;erisine &nbsp;$table değişkeni belirtmeniz gerekli.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">protected $table = \'sayfalar\';</code></pre>\r\n\r\n<p>Yine aynı şekilde Primary Key olarak id kullanmayacaksanız eğer onu da,</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">protected $primaryKey = \'sayfa_id\';</code></pre>\r\n\r\n<p>olarak belirtmeniz gerekli.</p>\r\n\r\n<p>Yukarıda bahsettiğim gibi bu yazıda Migration yapısını anlatmayacağım fakat Migration kullanarak oluşturulan tablolarda timestamps değişkeni vardır. Bu değişken tablonuza &lsquo;created_at&rsquo; ve &lsquo;updated_at&rsquo; kolonları ekler. Biz manuel oluşturduğumuz tablomuza bunları eklemediğimiz i&ccedil;in Model yapımıza bunları tabloda aramaması gerektiğini s&ouml;ylememiz gerek. Yoksa Model hata oluşturacaktır. Bunun i&ccedil;in,</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">public $timestamps = false;</code></pre>\r\n\r\n<p>satırı Model i&ccedil;erisine eklememiz gereklidir.</p>\r\n\r\n<p>Laravel Model yapısında hangi kolonun yazılabilir olduğu sizin tarafınızdan mutlaka belirtilmelidir. Yukarıdaki &ouml;rnek tablomuzda &lsquo;<strong>aktif</strong>&rsquo; kolonunun değiştirilmesini istemediğimizi d&uuml;ş&uuml;n&uuml;rsek bunun i&ccedil;in Model i&ccedil;erisine</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">protected $fillable = [\'baslik\',\'icerik\'];</code></pre>\r\n\r\n<p>Burada g&ouml;rd&uuml;ğ&uuml;n&uuml;z gibi &lsquo;aktif&rsquo; ve &lsquo;id&rsquo; kolonlarımız yok. Bunların olmaması Laravel sistemine bunların manip&uuml;le edilmemesi gerektiği, korunması gerektiğini belirtir. Yani buraya yazmadığımız kolonlar Controller ile değiştirilemez. Laravel i&ccedil;in bu bir &ccedil;eşit g&uuml;venlik &ouml;nlemidir ve bu &ouml;nlem Mass Assignment olarak adlandırılır.</p>\r\n\r\n<p>Eğer biz t&uuml;m alanların değiştirilebilir olmasını istiyorsak ya da sadece &lsquo;id&rsquo; kolonunun korunmasını istiyorsak ve tablomuzda 30 adet kolon varsa bunu tek tek yazmamız mı gerekecek? Tabi ki hayır. S&uuml;rekli bizim iyiliğimizi d&uuml;ş&uuml;nen Laravel bunun i&ccedil;inde &ccedil;&ouml;z&uuml;m oluşturmuş &lsquo;guarded&rsquo;.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">protected $guarded = [];</code></pre>\r\n\r\n<p>ya da</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">protected $guarded = [\'id\'];</code></pre>\r\n\r\n<p>Bu şekilde belirttiğimiz kolonlar harici olanların hepsinin değiştirilebilir olduğunu belirtmiş oluyoruz.</p>\r\n\r\n<p>Son olarak yukarıdaki kod satırlarının Model i&ccedil;erisindeki yerleşimi aşağıda yer alan resimdeki gibi olmalıdır.</p>\r\n\r\n<p><img alt=\"laravel model son hali\" src=\"/upload/images/62/laravel-model(1).jpg\" style=\"height:395px; width:800px\" /></p>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<p>Ref:&nbsp;<a href=\"https://www.mobilhanem.com/laravel-dersleri-laravel-nedir/\" target=\"_blank\">laravel-dersleri</a></p>', '2018-10-01 04:09:49', 1, 3, '', 0);
INSERT INTO `yazilar` (`yazi_id`, `yazi_baslik`, `yazi_url`, `yazi_icerik`, `yazi_created_at`, `kategori_id`, `yazi_sira`, `yazi_etiketler`, `yazi_onecikan`) VALUES
(11, '20 Laravel Eloquent İpuçları', '20-Laravel-Eloquent-ipuclari', '<h3>1. Increments ve Decrements</h3>\r\n\r\n<pre>\r\n<code class=\"language-php\">$article = Article::find($article_id);\r\n$article-&gt;read_count++;\r\n$article-&gt;save();\r\n</code></pre>\r\n\r\n<p>yerine,</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$article = Article::find($article_id);\r\n$article-&gt;increment(\'read_count\');\r\n</code></pre>\r\n\r\n<p>veya</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">Article::find($article_id)-&gt;increment(\'read_count\');\r\nArticle::find($article_id)-&gt;increment(\'read_count\', 10); // +10\r\nProduct::find($produce_id)-&gt;decrement(\'stock\'); // -1\r\n</code></pre>\r\n\r\n<hr />\r\n<h3>2. XorY metodları</h3>\r\n\r\n<p>Eloquent iki metodu birleştiren bika&ccedil; metodu var.</p>\r\n\r\n<p><strong>&Ouml;rnek 1</strong>&nbsp;&ndash;&nbsp;<code>findOrFail()</code>:</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$user = User::find($id);\r\nif (!$user) { abort (404); }\r\n</code></pre>\r\n\r\n<p>yerine,</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$user = User::findOrFail($id);\r\n</code></pre>\r\n\r\n<p><strong>&Ouml;rnek 2</strong>&nbsp;&ndash;&nbsp;<code>firstOrCreate()</code>:</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$user = User::where(\'email\', $email)-&gt;first();\r\nif (!$user) {\r\n  User::create([\r\n    \'email\' =&gt; $email\r\n  ]);\r\n}\r\n</code></pre>\r\n\r\n<p>yerine,</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$user = User::firstOrCreate([\'email\' =&gt; $email]);\r\n</code></pre>\r\n\r\n<hr />\r\n<h3>3. Model boot() metodu</h3>\r\n\r\n<p>Eloquent modelinde varsayılan davranışı değiştirmek i&ccedil;in&nbsp;<code>boot()</code>&nbsp;metodu vardır.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">class User extends Model{\r\n    public static function boot(){\r\n        parent::boot();\r\n        static::updating(function($model){\r\n            // do some logging\r\n            // override some property like $model-&gt;something = transform($something);\r\n        });\r\n    }\r\n}</code></pre>\r\n\r\n<p><a href=\"https://github.com/webpatser/laravel-uuid\" target=\"_blank\">UUID field</a>&nbsp;alanını oluşturmak istediğimizi d&uuml;ş&uuml;nelim.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">public static function boot(){\r\n  parent::boot();\r\n  self::creating(function ($model) {\r\n    $model-&gt;uuid = (string)Uuid::generate();\r\n  });\r\n}</code></pre>\r\n\r\n<hr />\r\n<h3>4. Koşullu ilişkilendirme ve sıralama</h3>\r\n\r\n<p>İlişkiyi oluşturmanın tipik yolu,</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">public function users() {\r\n    return $this-&gt;hasMany(\'App\\User\');    \r\n}\r\n</code></pre>\r\n\r\n<p>Bu noktada <em>where </em>ve <em>orderby </em>ifadelerini kullanabiliriz. &Ouml;rnek olarak kullanıcılar i&ccedil;in spesifik ilişki veya email&#39;e g&ouml;re sıralamak istiyorsak,</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">public function approvedUsers() {\r\n    return $this-&gt;hasMany(\'App\\User\')-&gt;where(\'approved\', 1)-&gt;orderBy(\'email\');\r\n}\r\n</code></pre>\r\n\r\n<hr />\r\n<h3>5. Model &ouml;zellikleri: timestamps, appends vb.</h3>\r\n\r\n<pre>\r\n<code class=\"language-php\">class User extends Model {\r\n    protected $table = \'users\';\r\n    protected $fillable = [\'email\', \'password\']; // which fields can be filled with User::create()\r\n    protected $dates = [\'created_at\', \'deleted_at\']; // which fields will be Carbon-ized\r\n    protected $appends = [\'field1\', \'field2\']; // additional values returned in JSON\r\n}\r\n</code></pre>\r\n\r\n<p>ve</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">protected $primaryKey = \'uuid\'; // it doesn\'t have to be \"id\"\r\npublic $incrementing = false; // and it doesn\'t even have to be auto-incrementing!\r\nprotected $perPage = 25; // Yes, you can override pagination count PER MODEL (default 15)\r\nconst CREATED_AT = \'created_at\';\r\nconst UPDATED_AT = \'updated_at\'; // Yes, even those names can be overridden\r\npublic $timestamps = false; // or even not used at all\r\n</code></pre>\r\n\r\n<p><a href=\"https://github.com/laravel/framework/blob/5.6/src/Illuminate/Database/Eloquent/Model.php\">Abstract Model class</a>&nbsp;adresinde daha fazlasını bulabilirsiniz.</p>\r\n\r\n<hr />\r\n<h3>6. &Ccedil;oklu kayıt bulma</h3>\r\n\r\n<pre>\r\n<code class=\"language-php\">$user = User::find(1);\r\n</code></pre>\r\n\r\n<p><em>find </em>komutu i&ccedil;erisine birden fazla id g&ouml;nderebiliyoruz.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$users = User::find([1,2,3]);\r\n</code></pre>\r\n\r\n<hr />\r\n<h3>7. WhereX</h3>\r\n\r\n<p>Controller sınıfımızdan view dosyalarımıza bir değer g&ouml;ndermek istediğimiz zaman nasıl <em>with </em>komutu yerine <em>withDeger </em>komutunu kullanabiliyorsak aynı işlemi <em>where </em>i&ccedil;inde kullanabiliriz.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$users = User::where(\'approved\', 1)-&gt;get();\r\n</code></pre>\r\n\r\n<p>yerine</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$users = User::whereApproved(1)-&gt;get(); \r\n</code></pre>\r\n\r\n<p>Ayrıca, aynı yapıyı tarih işlemleri i&ccedil;inde yapabiliriz.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">User::whereDate(\'created_at\', date(\'Y-m-d\'));\r\nUser::whereDay(\'created_at\', date(\'d\'));\r\nUser::whereMonth(\'created_at\', date(\'m\'));\r\nUser::whereYear(\'created_at\', date(\'Y\'));\r\n</code></pre>\r\n\r\n<hr />\r\n<h3>8. Order by ilişkisi</h3>\r\n\r\n<p>&Ouml;rnek olarak db de en son g&uuml;ncellenen yazıları en &uuml;ste taşımak istersek bu yapıyı kullanabiliriz.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">public function latestPost(){\r\n    return $this-&gt;hasOne(\\App\\Post::class)-&gt;latest();\r\n}\r\n</code></pre>\r\n\r\n<p>Controller dosyamızda,</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$users = Topic::with(\'latestPost\')-&gt;get()-&gt;sortByDesc(\'latestPost.created_at\');\r\n</code></pre>\r\n\r\n<hr />\r\n<h3>9. Eloquent::when() &ndash; no more if-else&rsquo;s</h3>\r\n\r\n<p>&Ccedil;oğumuz aşağıdaki gibi &ldquo;if-else&rdquo; sorgusu yazarız.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">if (request(\'filter_by\') == \'likes\') {\r\n    $query-&gt;where(\'likes\', \'&gt;\', request(\'likes_amount\', 0));\r\n}\r\nif (request(\'filter_by\') == \'date\') {\r\n    $query-&gt;orderBy(\'created_at\', request(\'ordering_rule\', \'desc\'));\r\n}\r\n</code></pre>\r\n\r\n<p>Ama daha iyi bir yapı var;&nbsp;<code>when()</code>:</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$query = Author::query();\r\n$query-&gt;when(request(\'filter_by\') == \'likes\', function ($q) {\r\n    return $q-&gt;where(\'likes\', \'&gt;\', request(\'likes_amount\', 0));\r\n});\r\n$query-&gt;when(request(\'filter_by\') == \'date\', function ($q) {\r\n    return $q-&gt;orderBy(\'created_at\', request(\'ordering_rule\', \'desc\'));\r\n});\r\n</code></pre>\r\n\r\n<p>Daha kısa veya hoş g&ouml;r&uuml;lmeyebilir ama &ccedil;ok daha g&uuml;&ccedil;l&uuml; bir yapıdır.</p>\r\n\r\n<pre>\r\n<code>$query = User::query();\r\n$query-&gt;when(request(\'role\', false), function ($q, $role) { \r\n    return $q-&gt;where(\'role_id\', $role);\r\n});\r\n$authors = $query-&gt;get();\r\n</code></pre>\r\n\r\n<hr />\r\n<h3>10. BelongsTo&nbsp;</h3>\r\n\r\n<p>&Ouml;rneğin Post ve Author tablomuz ilişkili,</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">{{ $post-&gt;author-&gt;name }}\r\n</code></pre>\r\n\r\n<p>Peki ya Author silindi yada bir şekilde ayarlanmadı. &ldquo;<em>property of non-object</em>&rdquo; diye bir hata alırız. Bunu &ouml;n&uuml;ne ge&ccedil;ebiliriz.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">{{ $post-&gt;author-&gt;name ?? \'\' }}\r\n</code></pre>\r\n\r\n<p>Ama ilişki tanımlama sırasında bunu default olarak yapabiliriz.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">public function author(){\r\n    return $this-&gt;belongsTo(\'App\\Author\')-&gt;withDefault();\r\n}\r\n</code></pre>\r\n\r\n<p>Bu &ouml;rnekte, yazar eklenmemiş ise&nbsp;<code>author()</code>&nbsp;ilişkisi <code>App\\Author</code>&nbsp;modelinden boş gelecektir. B&ouml;ylece, varsayılan olarak author kısmını tanımlayabiliriz.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">public function author(){\r\n    return $this-&gt;belongsTo(\'App\\Author\')-&gt;withDefault([\r\n        \'name\' =&gt; \'Yazar Tanımlanmamış\'\r\n    ]);\r\n}\r\n</code></pre>\r\n\r\n<hr />\r\n<h3>11. Order by Mutator</h3>\r\n\r\n<p>B&ouml;yle bir kodumuz olduğunu d&uuml;ş&uuml;nelim.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">function getFullNameAttribute(){\r\n  return $this-&gt;attributes[\'first_name\'] . \' \' . $this-&gt;attributes[\'last_name\'];\r\n}\r\n</code></pre>\r\n\r\n<p>Şimdi de <code>full_name e&nbsp;</code>g&ouml;re sıralayalım? &Ccedil;alışmayacaktır.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$clients = Client::orderBy(\'full_name\')-&gt;get(); // doesn\'t work\r\n</code></pre>\r\n\r\n<p>&Ccedil;&ouml;z&uuml;m basit, sıralamayı değerler bize d&ouml;nd&uuml;kten sonra yapalım.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$clients = Client::get()-&gt;sortBy(\'full_name\'); // works!\r\n</code></pre>\r\n\r\n<p>Note: Fonksiyon ismine dikkat:&nbsp;<strong>orderBy</strong>&nbsp;değil&nbsp;<strong>sortBy</strong>.</p>\r\n\r\n<hr />\r\n<h3>12. K&uuml;resel kapsamda varsayılan sıralama</h3>\r\n\r\n<p><code>User::all()</code>&nbsp;kodunda varsayılan olarak <code>name</code>&nbsp;alanına g&ouml;re sıralama yapacaktır. <em><code>boot()</code></em>&nbsp;metoduna d&ouml;nelim ve;</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">protected static function boot(){\r\n    parent::boot();\r\n    // Order by name ASC\r\n    static::addGlobalScope(\'order\', function (Builder $builder) {\r\n        $builder-&gt;orderBy(\'name\', \'asc\');\r\n    });\r\n}\r\n</code></pre>\r\n\r\n<p><a href=\"https://laravel.com/docs/5.6/eloquent#query-scopes\" target=\"_blank\">Daha fazlası i&ccedil;in,</a>.</p>\r\n\r\n<hr />\r\n<h3>13. Raw query methods</h3>\r\n\r\n<p>Bazen Eloquent&nbsp; durumlarımıza saf sorgular eklememiz gerekli olur şansımıza bunlar i&ccedil;in fonksiyonlar vardır.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">// whereRaw\r\n$orders = DB::table(\'orders\')\r\n    -&gt;whereRaw(\'price &gt; IF(state = \"TX\", ?, 100)\', [200])\r\n    -&gt;get();\r\n\r\n// havingRaw\r\nProduct::groupBy(\'category_id\')-&gt;havingRaw(\'COUNT(*) &gt; 1\')-&gt;get();\r\n\r\n// orderByRaw\r\nUser::where(\'created_at\', \'&gt;\', \'2016-01-01\')\r\n  -&gt;orderByRaw(\'(updated_at - created_at) desc\')\r\n  -&gt;get();\r\n</code></pre>\r\n\r\n<hr />\r\n<h3>14. Replicate: Kopya oluşturma</h3>\r\n\r\n<p>Kısaca,</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$task = Tasks::find(1);\r\n$newTask = $task-&gt;replicate();\r\n$newTask-&gt;save();\r\n</code></pre>\r\n\r\n<hr />\r\n<h3>15. B&uuml;y&uuml;k tablolar i&ccedil;in chunk() metodu</h3>\r\n\r\n<p>K&uuml;&ccedil;&uuml;k par&ccedil;alara b&ouml;lerek &ccedil;alışabiliriz.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$users = User::all();\r\nforeach ($users as $user) {\r\n    // ...\r\n</code></pre>\r\n\r\n<p>yerine,</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">User::chunk(100, function ($users) {\r\n    foreach ($users as $user) {\r\n        // ...\r\n    }\r\n});\r\n</code></pre>\r\n\r\n<hr />\r\n<h3>16. Create additional things when creating a model</h3>\r\n\r\n<p>Artisan komutunu biliyoruz.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">php artisan make:model Company\r\n</code></pre>\r\n\r\n<p>Ama, ilişkili alanları oluşturmak i&ccedil;in 3 adet flag olduğunu biliyor muydunuz?</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">php artisan make:model Company -mcr\r\n</code></pre>\r\n\r\n<ul>\r\n	<li>-m, <strong>migration</strong></li>\r\n	<li>-c, <strong>controller</strong></li>\r\n	<li>-r ,<strong>resourceful&nbsp;</strong>dosyalarımızı oluşturmaya yarar.</li>\r\n</ul>\r\n\r\n<hr />\r\n<h3>17. G&uuml;ncelleme yaptığımızda updated_at s&uuml;tunu&nbsp;override</h3>\r\n\r\n<p><em><code>-&gt;save()</code></em>&nbsp;metodun parametre alabiliyor.&nbsp;Sonu&ccedil; olarak, ilgili kısmı g&uuml;ncellememesi i&ccedil;in parametre olarak belirtebiliyoruz.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$product = Product::find($id);\r\n$product-&gt;updated_at = \'2019-01-01 10:00:00\';\r\n$product-&gt;save([\'timestamps\' =&gt; false]);\r\n</code></pre>\r\n\r\n<hr />\r\n<h3>18. update() &ccedil;ıktısı?</h3>\r\n\r\n<p>Hi&ccedil; d&uuml;ş&uuml;nd&uuml;n&uuml;z m&uuml; kod ger&ccedil;ekten hangi değerleri g&ouml;nderiyor.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$result = $products-&gt;whereNull(\'category_id\')-&gt;update([\'category_id\' =&gt; 2]);\r\n</code></pre>\r\n\r\n<p>Cevap, etkilenen satırlardır. Dolayısıyla, ka&ccedil; satırın etkilendiğini kontrol etmeniz gerekiyorsa, başka bir şeyi aramanıza gerek yoktur; update () y&ouml;ntemi bu sayıyı sizin yerinize d&ouml;nd&uuml;r&uuml;r.</p>\r\n\r\n<hr />\r\n<h3>19. Parantezleri bir Eloquent sorgusuna d&ouml;n&uuml;şt&uuml;r&uuml;n</h3>\r\n\r\n<p>SQL sorgunuzda and-or kısımlarını karıştırabiliriz.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">... WHERE (gender = \'Male\' and age &gt;= 18) or (gender = \'Female\' and age &gt;= 65)\r\n</code></pre>\r\n\r\n<p>Yanlış,</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$q-&gt;where(\'gender\', \'Male\');\r\n$q-&gt;orWhere(\'age\', \'&gt;=\', 18);\r\n$q-&gt;where(\'gender\', \'Female\');\r\n$q-&gt;orWhere(\'age\', \'&gt;=\', 65);\r\n</code></pre>\r\n\r\n<p>Karışık olabilir ama doğrusu,</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$q-&gt;where(function ($query) {\r\n    $query-&gt;where(\'gender\', \'Male\')\r\n        -&gt;where(\'age\', \'&gt;=\', 18);\r\n})-&gt;orWhere(function($query) {\r\n    $query-&gt;where(\'gender\', \'Female\')\r\n        -&gt;where(\'age\', \'&gt;=\', 65); \r\n})\r\n</code></pre>\r\n\r\n<hr />\r\n<h3>20. &Ccedil;oklu parametreler ile&nbsp;orWhere</h3>\r\n\r\n<pre>\r\n<code class=\"language-php\">$q-&gt;where(\'a\', 1);\r\n$q-&gt;orWhere(\'b\', 2);\r\n$q-&gt;orWhere(\'c\', 3);\r\n</code></pre>\r\n\r\n<p>Bu şekilde de kullanabiliriz.</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">$q-&gt;where(\'a\', 1);\r\n$q-&gt;orWhere([\'b\' =&gt; 2, \'c\' =&gt; 3]);\r\n</code></pre>\r\n\r\n<hr />\r\n<p>&nbsp;</p>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<p>Ref :&nbsp;<a href=\"https://laravel-news.com/eloquent-tips-tricks\" target=\"_blank\">laravel-news.com</a></p>', '2018-10-15 02:18:31', 1, 2, '', 0),
(34, 'Codeigniter Nedir?', 'codeigniter-nedir', '<p>Codeigniter bir php freamworkt&uuml;r. Bir başka deyişle php kod &ccedil;atısıdır. Codeigniter MVC(Model-View-Controller) yapısını kullanır. Bu da bize temiz, az ve d&uuml;zenli kod yazmamızı sağlar. Codeigniter b&uuml;nyesinde hazır k&uuml;t&uuml;phaneler barındırır php ile uzun kodlamalar ile yapabileceğimiz işlemleri bu k&uuml;t&uuml;phaneler sayesinde daha az kod ile&nbsp;kolaylıkla yapabiliriz. Şimdi MVC yapısı ne demektir bundan bahsedelim;</p>\r\n\r\n<p><strong><em><u>Model:&nbsp;</u></em></strong>Veri tabanı işlemleri ile ilgili kodları&nbsp;yazdığımız b&ouml;l&uuml;md&uuml;r.</p>\r\n\r\n<p><strong><u><em>View:&nbsp;</em></u></strong>Sayfalarımızın bulunduğu b&ouml;l&uuml;md&uuml;r.</p>\r\n\r\n<p><strong><u><em>Controller:&nbsp;</em></u></strong>Model ile View arasında k&ouml;pr&uuml; g&ouml;revi g&ouml;rerek, modelden hangi bilgiler &ccedil;ağrılacak, viewden hangi sayfalar y&uuml;klenecek bunları belirler.</p>\r\n\r\n<p>Şimdi basit bir &ouml;rnek yapalım. Aplication views klas&ouml;r&uuml;n&uuml;n i&ccedil;ine index.php isminde bir sayfa oluşturuyoruz ve aşağıdaki kodları yazıyoruz.<br />\r\n&nbsp;</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">&lt;?php\r\necho \"Burası anasayfadır\";\r\n?&gt;</code></pre>\r\n\r\n<p>Daha sonra aplication controller dosyamızın i&ccedil;ine anasayfa.php isminde dosya oluşturuyoruz ve&nbsp;aşağıdaki kodları yazıyoruz.<br />\r\n&nbsp;</p>\r\n\r\n<pre>\r\n<code class=\"language-php\">\r\n&lt;?php defined(\'BASEPATH\') OR exit(\'No direct script access allowed\');\r\nclass anasayfa extends CI_Controller {\r\n	\r\n		function __construct(){\r\n		     parent::__construct();	//Yapıcı fonksiyonumuz.\r\n        }	\r\n	\r\n        function index(){\r\n			$this-&gt;load-&gt;view(\'index\'); //view klasöründeki index.php\' yi yüklüyoruz.\r\n		}\r\n}</code></pre>\r\n\r\n<p>&nbsp;</p>\r\n', '2018-11-19 14:10:07', 2, 0, 'codeigniter,php,mvc', 1);

-- --------------------------------------------------------

--
-- Tablo için tablo yapısı `yorumlar`
--

CREATE TABLE `yorumlar` (
  `yorum_id` int(11) NOT NULL,
  `yazi_id` int(11) NOT NULL,
  `yorum_isim` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `yorum_email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `yorum_yorum` text COLLATE utf8_unicode_ci NOT NULL,
  `yorum_created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `yorum_aktif` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Tablo döküm verisi `yorumlar`
--

INSERT INTO `yorumlar` (`yorum_id`, `yazi_id`, `yorum_isim`, `yorum_email`, `yorum_yorum`, `yorum_created_at`, `yorum_aktif`) VALUES
(1, 1, 'Lorem Ipsum', 'lorem@ipsum.com', 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\'s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.\r\n', '2018-10-12 03:56:24', 1),
(3, 1, 'Lorem Ipsum', 'lorem@ipsum.com', 'Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum 2', '2018-10-13 04:35:46', 1),
(5, 2, 'Lorem Ipsum', 'lorem@ipsum.com', '1Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum 1', '2018-10-22 07:13:13', 1);

--
-- Dökümü yapılmış tablolar için indeksler
--

--
-- Tablo için indeksler `kategoriler`
--
ALTER TABLE `kategoriler`
  ADD PRIMARY KEY (`kategori_id`);

--
-- Tablo için indeksler `users`
--
ALTER TABLE `users`
  ADD PRIMARY KEY (`id`);

--
-- Tablo için indeksler `yazilar`
--
ALTER TABLE `yazilar`
  ADD PRIMARY KEY (`yazi_id`);

--
-- Tablo için indeksler `yorumlar`
--
ALTER TABLE `yorumlar`
  ADD PRIMARY KEY (`yorum_id`);

--
-- Dökümü yapılmış tablolar için AUTO_INCREMENT değeri
--

--
-- Tablo için AUTO_INCREMENT değeri `kategoriler`
--
ALTER TABLE `kategoriler`
  MODIFY `kategori_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;

--
-- Tablo için AUTO_INCREMENT değeri `users`
--
ALTER TABLE `users`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;

--
-- Tablo için AUTO_INCREMENT değeri `yazilar`
--
ALTER TABLE `yazilar`
  MODIFY `yazi_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=35;

--
-- Tablo için AUTO_INCREMENT değeri `yorumlar`
--
ALTER TABLE `yorumlar`
  MODIFY `yorum_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
