2014-11-03 23 views
11

Tôi đang cố gắng lưu nhiều hàng vào một bảng, tuy nhiên, tôi được trình bày với một Mass Assignment Error.Laravel - Lỗi chuyển nhượng hàng loạt Lỗi ngoại lệ

Lỗi này là: 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(); 
    } 

cấu trúc cơ sở dữ liệu của tôi là:

screenshot

vì vậy không có bất kỳ sai chính tả. Criteria_id đến từ biến từ tiêu chí đã lưu gần đây (xem mã trên forloop).

Mọi trợ giúp sẽ được đánh giá cao.

+1

là 'cái criteria_id' trong 'mảng $ fillable' của mô hình? – lukasgeiter

+0

@ lukasgeiter, không phải vậy. Mảng trống. Tôi phải truy cập vào biến sau này trong đoạn mã hoạt động hoàn toàn tốt, đó là bên trong một vòng lặp 'foreach'. - '-> đính kèm ($ criteria_id)'. – Ben

Trả lời

33

Để có thể đặt thuộc tính bằng cách chuyển chúng đến hàm tạo của mô hình, bạn cần liệt kê tất cả các thuộc tính bạn cần trong mảng $fillable. Như đã đề cập trong Docs

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

Ngoài ra bạn có thể sử dụng phương pháp create nếu bạn muốn. Nó tạo ra một mô hình mới và lưu nó trực tiếp:

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

không bao giờ biết hùng hồn giống như ruby ​​trên đường ray 'attr_accessible' –

9

Các ngược những gì Lukas nói là "bảo vệ". Thay vì các trường "danh sách trắng", bạn chỉ có thể khai báo được bảo vệ.

Ví dụ:

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

Đây là hữu ích hơn đối với tôi bởi vì tôi không thực sự quan tâm nhất lĩnh vực.

Gotten từ tài liệu cho Laravel 5.2 nhưng tôi cho rằng nó hoạt động trên các phiên bản cũ hơn.

Để cho phép bất kỳ lĩnh vực, bạn chỉ có thể cung cấp một mảng trống:

class Bedroom extends Model 
{ 
    protected $guarded = []; 
} 
Các vấn đề liên quan