Model
Model'ler genellikle veritabanı işlemlerinin yapıldığı nesnelerdir. /App/Models dizininde bulunurlar. Sadece veritabanı işlemlerini değil, harici olarak dahil edilebilecek farklı kodlar da içerebilirler.
Model nesnesi ile veritabanı sorguları çalıştırma hakkında ayrıntılı bilgi için kılavuzdaki Database başlığını ziyaret edebilirsiniz.
Model Oluşturma
Model dosyaları /App/Models dizininde yer almalıdır. Aşağıda basit bir model örneği görülmektedir;
//--- [*] App/Models/Blog.php ---//
namespace App\Models;
use DB;
class Blog
{
public function posts()
{
return DB::select('*')->from('posts')->getAll();
}
}
Model Kullanımı
Oluşturulan bir model'in methodlarına erişmek için Model nesnesi kullanılır.
Aşağıdaki örnekte, Blog controller'ı içerisinde, yukarıda oluşturulan Blog modeline ait posts() methodu çalıştırılıyor. Bunun için de Model nesnesi kullanılıyor.
//--- [*] /App/Controller/Blog.php ---//
namespace App\Controllers;
use View;
use Model;
class Blog
{
public function index()
{
$data['posts'] = Model::run('blog')->posts();
View::render('blog', $data);
}
}
Model'de Namespace Kullanımı
Model dosyaları, /App/Models dizini içerisinde oluşturulacak alt dizinlerde de bulunabilir. Böyle durumlarda, alt dizin içerisinde oluşturulan model dosyasının namespace'i App\Models\Alt_Dizin şeklinde olmalıdır.
//--- [*] /App/Models/Frontend/Home.php ---//
namespace App\Models\Frontend;
class Home
{
public function foo()
{
return 'bar';
}
}
Yukarıdaki örnekte yer alan model'e erişmek ve içerisindeki herhangi bir methodu çalıştırmak için, Model nesnesinin run() methoduna, ikinci parametre olarak namespace adı girilmeli ya da namespace() methodu ile tanımlama yapılmalıdır.
//--- [*] /App/Controller/Frontend/Blog.php ---//
namespace App\Controllers\Frontend;
use Model, View;
class Blog
{
public function posts()
{
// --- Örnek 1 --- //
$data['posts'] = Model::run('blog', 'frontend')->posts();
// --- Örnek 2 --- //
$data['posts'] = Model::namespace('frontend')->run('blog')->posts();
View::render('home', $data);
}
}
Yukarıdaki örnekte /App/Controllers/Frontend dizinindeki Blog controllerı içerisinde, önceki örneklerde oluşturulan ve /App/Models/Frontend dizininde yer alan Blog modeli kullanılıyor ve posts() methodu çalıştırılıyor.