Giriş
Laravel’e dahil olan Eloquent ORM, veritabanızla çalışmanızı sağlayan kullanışlı ve basit ActiveRecord uygulamasıdır. Her veritabanı tablosuna karşılık gelen “Model”, tabloyla etkileşim için kullanılır. Modeller tablolarınızda veriler için sorgular yapmanızı, yeni kayıtlar gitmenizi sağlar. Başlamadan önce veritabanı bağlantınızı config/database.php
dosyasında yapılandırın.
Modelleri Tanımlama
Başlamak için bir Eloquent model oluşturalım. Modeller tipik olarak app
klasörü içindedirler, fakat composer.json
dosyanızda belirttiğiniz otomatik yüklemelere bağğlı olarak herhangi bir yerde olabilir. Tüm Eloquent modelleri Illuminate\Database\Eloquent\Model
sınıfından genişletilir.
Model örneği üretmenin en kolay yolu make:model
artisan konutu kullanmaktır.
1 |
php artisan make:model User |
Model üretildiğinde bir database migration üretmek isterseniz --migration
veya -m
parametresiyle kullanabilirsiniz.
1 2 3 |
php artisan make:model User --migration php artisan make:model User -m |
Eloquent Model Kullanımı
Şimdi, flights
veritabanı tablomuzdan veri alıp sağlamak için kullanacağımız Flight
model sınıfına bir göz atalım.
1 2 3 4 5 6 7 8 9 10 |
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model { // } |
Tablo İsimleri
Not olarak Eloquent’e Flight
modelimiz için hangi tabloyu kullanacağını belirtmedik. Tablo ismi olarak özellikle belirtilmediyse sınıf isminin “snake case” (bkz. Snake case) ve çoğul hali kullanılır. Bu durumda Eloquent Flights
modelinin flights
tablosunda kayıtları saklamasıyla ilgli görevlerini üstlenir. Modelinizdeki table
özelliğiyle isteğe bağlı tablo ismi belirtebilirsiniz:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model { /** * The table associated with the model. * * @var string */ protected $table = 'my_flights'; } |
Birincil Anahtarlar (Primary Keys)
Eloquent ayrıca her tablonun birincil anahtarının id
olarak isimlendirildiğini varsayar. primary
özelliği ile bunu değiştrebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model { /** * @var string */ protected $primary = 'key_ismi'; } |
Zamanlar
Varsayılan olarak Eloquent tablonuzda created_at
, updated_at
kolonlarının olduğunu farzeder. Bu kolonların Eloquent tarafından yönetilmesinizi istemiyosanız modelinizdeki timestamps
özeliğini false
yapın:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model { /** * Indicates if the model should be timestamped. * * @var bool */ public $timestamps = false; } |
Zaman formatlarını özelleştirmeye ihtiyaç duyarsanız, modelinizdeki $date
özelliğini ayarlayın. Bu özellik, zaman özelliklerinin database de nasıl saklanacağını ve array veya JSON şekline dönüştürüldüğünde nasıl olacağını belirler.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model { /** * The storage format of the model's date columns. * * @var string */ protected $dateFormat = 'U'; } |
Veritabanı Bağlantısı
Varsayılan olacak Eloquent modelleri uygulamanız için yapılandırılmış varsayılan veritabanı bağlantısını kullanacaktır. Eğer farklı bir bağlantı belirtmek isterniz $connection
özelliğini kullanın:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model { /** * The connection name for the model. * * @var string */ protected $connection = 'connection-name'; } |
Modelleri Çoklu Getirmek
Modelinizi yarattıktan ve veritabanı tablosuyla ilişkilendirdikten sonra veritabanınızdan bilgi getirmeye hazırsınız demektir. Her Eloquent modelini, bu modelle ilişkilendirilen veritabanı tablosuna sorgu yapmanızı sağlayan güçlü bir sorgu aracı olarak düşünülebilir. Örnek olarak:
1 2 3 |
<?php namespace App\Http\Controllers; use App\Flight; use App\Http\Controllers\Controller; class FlightController extends Controller { /** * Show a list of all available flights. * * @return Response */ public function index() { $flights = Flight::all(); return view('flight.index', ['flights' => $flights]); } } |
Kolon Değerlerine Erişmek
Bir Eloquent model örneğiniz varsa, karşılık gelen özellik yoluyla kolon değerlerine erişebilirsiniz. Örneğin, her Flight
örneğini döngü yaparak name
kolonunu gösterelim:
1 2 3 |
foreach ($flights as $flight) { echo $flight->name; } |
Kısıtlamalar Eklemek
Eloquent all
metodu modelinizin tablosundaki sonuçların hepsini dönecektir. Her Eloquent modeli, sorgunuza kısıtlamalar ekleyebileceğiz ve sonra da get
metodunu kullarak sonuçları alabileceğiz bir sorgu yapıcısı (query builder) sunar.
1 2 3 4 |
$flights = App\Flight::where('active', 1) ->orderBy('name', 'desc') ->take(10) ->get(); |