hasOne kullanımı
Merhaba, bugün sizlere Eloquent ORM’sinde hasOne kullanımını anlatacağım. Öncelikle nedir bu Eloquent?
Eloquent ORM
Eloquent, Doctrine tabanlı tamamen açık-kaynaklı bir nesne-ilişkisel eşleme yani, ORM( Object Relational Mapping ) ve veritabanı soyutlama katmanıdır. Eloquent’te, Laravel’in medarı iftiharıdır. Github’taki orjinal reposunda kendisini şöyle tanıtır:
The Illuminate Database component is a full database toolkit for PHP, providing an expressive query builder, ActiveRecord style ORM, and schema builder. It currently supports MySQL, Postgres, SQL Server, and SQLite. It also serves as the database layer of the Laravel PHP framework.
–
Illuminate Database bileşeni, PHP için ifade edici bir sorgu oluşturucu, ActiveRecord tarzı ORM ve şema oluşturucu sunan tam bir veritabanı araç setidir. Şu an için MySQL, Postgres, SQL Server ve SQLite’ı desteklemektedir. Aynı zamanda Laravel PHP framework’ünün veritabanı katmanı olarak da görev yapmaktadır.
Hızlıca Başlayalım:
Öncelikle Yazar diye bir modelimizin olduğunu varsayalım; Ben created_at ve updated_at sütunlarını eklemedim.
AUTHORS
----------------
id | name
----------------
1 | Dostoyevski
2 | Nazım Hikmet
3 | Attilâ İlhan
4 | Gabriel García Márquez
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Book extends Model
{
protected $table = 'books';
}
Bir de kitaplarımız için başka bir tablo olduğunu varsayalım;
BOOKS
---------------
author_id | title
---------------
1 | Karamazov Kardeşler
2 | Memleketimden İnsan Manzaraları
2 | Kuvâ-yi Milliye Destanı
1 | Puşkin Konuşması
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Book extends Model
{
protected $table = 'books';
}
hasOne kodu aşağıdaki gibi düzenlenebilir. Bunu Author modeline yerleştirdikten sonra;
public function getBooks(){
return $this->hasOne(Book::class, 'author_id', 'id')->select("title")->get();
}
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Author extends Model
{
protected $table = 'authors';
public function getBooks(){
return $this->hasOne(Book::class, 'author_id', 'id')->select("title")->get();
}
}
şeklinde olacaktır. Artık bir deneme yapalım;
$author = Author::find(2);
//Nâzım Hikmet’in kayıtlı olduğu ID
dd($author->getBooks());
/*
2 | Memleketimden İnsan Manzaraları
3 | Kuvâ-yi Milliye Destanı
*/
olarak çıktımızı alacağız.
Eğer ki aklınıza takılan bir şey olursa benimle iletişime geçebilirsiniz.