2014-11-03 24 views
11

Birden çok satırı bir tabloya kaydetmeye çalışıyorum, ancak Mass Assignment Error ile sunuyorum.Laravel - Toplu Atama İstisnası hatası

hatadır: Illuminate \ Database \ Eloquent \ MassAssignmentException criteria_id

$criteria->save(); 

    $criteria_id = $criteria->id; 

    foreach(Input::get('bedrooms') as $bedroom){ 
     $new_bedroom=array(
      'criteria_id' => $criteria->id, 
      'bedroom' => $bedroom, 
      ); 
     $bedroom = new Bedroom($new_bedroom); 
     $bedroom->save(); 
    } 

Benim veritabanı yapısı şöyledir:

screenshot

böylece herhangi bir yanlış yazım yoktur. Criteria_id, son kaydedilen ölçütlerden gelen değişkenden gelir (bkz. Yukarıdaki forloop).

Herhangi bir yardım büyük memnuniyetle karşılanacaktır.

+1

modelinin '$ fillable' dizideki' criteria_id' mı:

herhangi alanlar, sadece boş bir dizi sağlayabilir izin vermek için? – lukasgeiter

+0

@lukasgeiter, hayır değil. Dizi boş. Değişkeni daha sonra düzgün bir şekilde işe yarayan kodda kullanmam gerekiyor, yani bir 'foreach' döngüsünün içinde. - '-> ekle ($ ölçüt_kimliği)'. – Ben

cevap

33

Modelin yapıcısına ileterek özellikleri ayarlayabilmek için, $fillable dizisinde gereken tüm özellikleri listelemeniz gerekir. Docs

class Bedroom extends Eloquent { 
    protected $fillable = array('criteria_id', 'bedroom'); 
} 

belirtildiği gibi isterseniz Ayrıca create yöntemi kullanabilirsiniz. Bu yeni bir model oluşturur ve bunu doğrudan kaydeder: Ne söyledi Lukas "korunmaktadır"

foreach(Input::get('bedrooms') as $bedroom){ 
    $new_bedroom=array(
     'criteria_id' => $criteria->id, 
     'bedroom' => $bedroom, 
     ); 
    $bedroom = Bedroom::create($new_bedroom); 
} 
+0

, "attr_accessible" raylarındaki yakut gibiydi. –

9

ters arasında. "Beyaz listeleme" alanları yerine, hangisinin korunduğunu ilan edebilirsiniz. Örneğin

: Gerçekten çoğu alanları hakkında umurumda değil mi çünkü

class Bedroom extends Model 
{ 
    protected $guarded = ['id']; 
} 

Bu benim için daha yararlı oldu.

Laravel 5.2 belgelerinden aldım ancak daha eski sürümlerde çalıştığını varsayalım.

class Bedroom extends Model 
{ 
    protected $guarded = []; 
} 
İlgili konular