Giriş yapmadınız.

#1 20.05.2015 10:57:10

iltegin
Üye
Kayıtlı: 03.01.2015
Mesajlar: 15

Eloquent Relationships onDelete hakkında bilgi .

Karşılaştığım tam baş belası bir sorundan bahsetmek istiyorum .

Yabancı anahtar olarak tanımladığınız alan kesinlikle unsigned olması lazım çünkü diğer tablodaki birincil alan unsigned .

$table->integer('user_id')->unsigned();

&&

$table->unsignedInteger('user_id')->nullable(); // nullable opsiyonel 

bu işlemi birincil anahtarda herhangi bir kayıt olmadan yapamazsınız . yani  user tablosunda kayıt yaptığınız alandaki user_id ile ilişkili olacak mutlaka bir user kaydı olmalı .

         $table->foreign('user_id')
	->references('id')
	->on('users')
	->onDelete('cascade');

Yani bu sorunla karşılaşırsanız muhtemelen şu ekranla karşılaşacaksınız .

ekrang%C3%B6r%C3%BCnt%C3%BCs%C3%BC(31).png


Karşılaştığım sorunu nasıl çözdüğüme gelirsek ilk önce rollback yaptım daha sonra migrate ettim .Kayıt yapamaya çalışınca  ilk önce hata aldım ama sonradan yukarda belirttiğim gibi  user kaydı oluşturup gerçek bir user kaydı ile kayıt yaptım .


ekrang%C3%B6r%C3%BCnt%C3%BCs%C3%BC(32).png
Gördüğünüz gibi  user kaydı oluşturdum   user_id  2 olarak verdim ve kayıt bundan sonra gerçekleşti .
Sorunum kalmadı umarım beni bu kadar uğraştıran şey sizi uğraştırmaz . smile

Son düzenleyen iltegin (20.05.2015 11:03:29)

Çevrimdışı

#2 20.05.2015 11:35:12

sergin
Üye
Kayıtlı: 17.07.2013
Mesajlar: 130
Website

Yanıt: Eloquent Relationships onDelete hakkında bilgi .

FOREIGN KEY tanımlamak için mysql'in kesin kuralıdır bu:

Corresponding columns in the foreign key and the referenced key must have similar data types. The size and sign of integer types must be the same. The length of string types need not be the same. For nonbinary (character) string columns, the character set and collation must be the same.

Laravel migration şema oluşturucusunda alanları tanımlarken $table->increments metodu ilgili alanı otomatik olarak unsigned olarak tanımlar.  O yüzden özellikle laravel'de bu tür alanlarla ilişkilendirilecek alanları mutlaka aynı tipte ve işarette (integer ve unsigned) olarak tanımlamayı unutmamak lazım.

Çevrimdışı

Forum alt kısmı