2016-11-21 24 views
7

Kimliği kullanarak bir posts veritabanı tablosundan kayıt almaya çalışıyorum. Kafamın bir süredir find() yöntemiyle uğraşıyorum, neden işe yaramadığı konusunda kafam karıştı. Eloquent: find() ve where() use laravel

$post = Post::find($id); 
$post->delete(); 

İstemeyerek ben bu did: Burada bana doğru görünüyor ama işe yaramadı benim sorgu

$post = Post::where('id', $id); 
$post->delete(); 

ve şaşırtıcı yeterli, işe yaradı ama nasıl hiçbir fikrim yok.

Ben de find() aksine where() bir sorgu oluşturucu olduğunu biliyoruz ve bu yüzden de bu gibi kullanabilirsiniz: yöntemler işe şekilde fark hakkında Post::where('id', $id)->first()

Herhangi fikirler?

cevap

7

Kodunuz iyi görünüyor, ama farkında olmak bir kaç şey vardır: Eğer yaparak id dışında bir Modelinizdeki birincil anahtar kurduysanız birincil anahtar üzerine

Post::find($id); eylemleri:

protected $primaryKey = 'slug'; 

sonra find yerine o anahtar ile arayacaktır.

public $incrementing = false; 
3

için:

laravel ayrıca bir tamsayı dışında bir şey kullanıyorsanız, false modelinize artan özelliğini ayarlamak gerekir (örneğin bir karakter dizisi) id, bir tamsayı olmasını bekler craig_h kullanıcısının yorum yapana üstüne yazılmamış (Eğer bu sorunun cevabına yorum eklemek için şu anda yeterince röporta sahip değilim üzgünüm), eğer birincil anahtarınız bir tamsayı değilse, modelinize ne tür bir veri türü olduğunu da söylemek istersiniz model tanımının en üstünde keyType ayarlayarak.

public $keyType = 'string' 

Etkili laravel 5.4 gibidir castAttribute() işlev tanımlanan türlerinin her hangi birisini anlar int, şamandıra, ip, BOOL, nesne, dizi toplama, tarih ve zaman damgası.

Bu, birincil anahtarınızın eşdeğer PHP veri türüne doğru şekilde yerleştirilmesini sağlayacaktır.