Laravel One To One İlişkisi

netr0n

Developer
Yönetici
Administrator
Katılım
17 Eki 2016
Mesajlar
474
Beğeniler
37
Puanları
28
#1
Programlama da en önemli konulardan bir tanesi şüphesiz veritabanı ilişkileridir. Veritabanı ilişkilerine ne kadar çok hakim olursanız algoritma bilginizde aynı orantıda gelişecektir. Laravel bize veritabanı ilişkilerinde inanılmaz kolaylıklar sağlıyor. Laravel'in içerisinde gelen Eloquent ORM yapısıyla çok kolay bir şekilde ilişki kurabiliyoruz.

One To One nedir?

One To One tablolar arasında birebir ilişki kurmamıza yaramaktadır. Bu birebir ilişkiye bir örnek verelim; Kullanıcılarınızın olduğunu varsayalım ve bu kullanıcılarınızın da hakkımda alanı olduğunu düşünelim. Bu durumda her kullanıcıya ait bir hakkımda içeriği olması gerekir ya da tam tersi her hakkımda alanının bir kullanıcıya ait olması gerekir. İşte bu yapıya birebir ilişkiler denir. Yani One To One Relationships.

Bu ilişki laravel'de nasıl yapılıyor örneklerle görelim.

Öncelikle terminal alanından model yapımızı oluşturuyoruz.

PHP:
php artisan make:model Hakkimda -m
Migration alanında oluşan hakkimizda tablosunu aşağıdaki gibi düzenliyoruz.

PHP:
<?php
 
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
 
class CreateHakkimdasTable extends Migration
{
	/**
	 * Run the migrations.
	 *
	 * @return void
	 */
	public function up()
	{
		Schema::create('hakkimizda', function (Blueprint $table) {
			$table->increments('id');
			$table->integer('user_id')->unsigned();
			$table->string('baslik');
			$table->text('hakkimda');
			$table->timestamps();
		});
	}
 
	/**
	 * Reverse the migrations.
	 *
	 * @return void
	 */
	public function down()
	{
		Schema::dropIfExists('hakkimizda');
	}
}

Daha sonra terminal alanından migrate komutumuzu çalıştırıyoruz.

PHP:
php artisan migrate
Yukarıdaki kodları ilk oluşturduğunuzda tablo ismini hakkimdas olarak oluşturduğu için manuel olarak o tablo ismini hakkimizda olarak değiştirdik. Dolayısıyla model sınıfımızda da bunu tanıtmamız gerekir aksi takdirde hata alırırz. Hakkimizda.php model sınıfımıza aşağıki kodu ekliyoruz.

PHP:
<?php
 
namespace App;
 
use Illuminate\Database\Eloquent\Model;
 
class Hakkimda extends Model
{
 
	protected $table = "hakkimizda";
}
User.php model yapımıza giderek aşağıdaki kodları giriyoruz.

PHP:
<?php
 
namespace App;
 
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
 
class User extends Authenticatable
{
	use Notifiable;
 
	/**
	 * The attributes that are mass assignable.
	 *
	 * @var array
	 */
	protected $fillable = [
		'name', 'email', 'password',
	];
 
	/**
	 * The attributes that should be hidden for arrays.
	 *
	 * @var array
	 */
	protected $hidden = [
		'password', 'remember_token',
	];
 
	public function hakkimda()
	{
		return $this->hasOne('App\Hakkimda');
	}
}
Dikkat etmeniz gereken One To One Relationships kullanımında hasMany(); metodunu kullanıyoruz.

Daha sonra routes alanına giderek rout komutlarımızı giriyoruz.

PHP:
Route::get('/hakkimda/user', function(){
 
	return Hakkimda::find(1)->hakkimda;
 
});

Tarayıcımıza gelerek siteadiniz.com/hakkimda/user olarak çalıştırdığınızda hakkimda alanının içeriğinin ekrana yazıldığını görebilirsiniz.

Yukarıda da söylediğimiz gibi birde bunun tam tersi bir ilişki var bir hakkımda alanı hangi üye'ye ait. Mantık aynı mantık sadece belongsTo(); metodumuzu kullanıyoruz birde bunu user modelimize değil hakkimizda modelimizde yapıyoruz. belongsTo metodunun ingilizce karşılığıda ait olmaktır. Yani biz burada kime ait ise onu bulmuş oluyoruz.

Hakkimizda modelimize aşağıdaki kodları ekliyoruz.

PHP:
<?php
 
namespace App;
 
use Illuminate\Database\Eloquent\Model;
 
class Hakkimda extends Model
{
 
	protected $table = "hakkimizda";
 
	public function user()
	{
		return $this->belongsTo('App\User');
	}
}
Route alanına rout kodlarımızı giriyoruz..

PHP:
Route::get('/user/hakkimda', function(){
 
	return Hakkimda::find(1)->user->name;
 
});

Tarayıcımıza gelerek siteadiniz.com/user/hakkimda olarak çalıştırdığınızda hakkimda alanının hangi üye'ye ait olduğunu erişmiş oluruz. Tabi bu erişim find(1) metodu ile belirttiğimiz ID'ye sahip olan üye'ye ait olacaktır. Hangi üye'yi erişmek istiyorsanız find metoduna o ID numarasını girmelisiniz.