2015-04-17 10 views
14

mam następujące tabele:Protect stół obrotowy od masowej przypisanie używając elokwentny

document: id, name; 
author: id, name, job_title; 
document_author: document_id, author_id, position 

olewam tablicę o następującej strukturze:

$attributes = [name, job_title, position]; 

próbuję stworzyć modelu autora i dołączyć to udokumentować:

$author = \Author::create($attributes); 
\Document::find($id)->authors()->save($author,$attributes); 

Potem dostać QueryException, ponieważ laravel próbuje masowej assign atrybuty do tabeli przestawnej, podczas gdy powinna ona przechodzić tylko przez pole position.

Jedynym rozwiązaniem mam jest filtrowanie tablicę, tak:

$author = \Author::create($attributes); 
$pivotAttributes = array_only($attributes, ['position']) 
\Document::find($id)->authors()->save($author,$pivotAttributes); 

Czy istnieje lepszy sposób, aby określić, które kolumny tabeli przestawnej są napełniane, lepiej gdzieś w modelu lub w jego relacja?

+0

Jeśli '$ attributes' jest' Request' (lub 'Input') instancji, można zrobić' $ request-> tylko ("pozycja '); ' –

Odpowiedz

2

Wkopiowałem kod Laravel i nie znalazłem żadnego dobrego sposobu na określenie parametru klasy Pivot do wypełnienia lub ochrony, mimo że jest to podklasa Modelu.

Oznacza to, że podejście jest już całkiem dobre.

+0

Rozumiem. Ale czy istnieje sposób na rozszerzenie Eloquent, aby zrobić rzeczy takie jak: '$ model-> belongsToMany (...) -> fillable (...)'? –