2015-04-17 17 views
14

Ich habe folgende Tabellen:mit Pivot-Tabelle aus Massenzuordnung Schütze eloquent

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

Ich bin eine Reihe von folgenden Struktur vorbei:

$attributes = [name, job_title, position]; 

Ich versuche Autor Modell zu erstellen und befestigen zu dokumentieren:

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

Dann habe ich QueryException bekommen, weil Laravel Massen assign versucht Attribute zu Pivot-Tabelle, während es nur ein position Feld übergeben sollte.

Die einzige Lösung, die ich bekam ist Array zu filtern, wie folgt aus:

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

Gibt es eine bessere Möglichkeit, zu definieren, welche Spalten von Pivot-Tabelle sind befüllbar, besser irgendwo im Modell oder in seiner Beziehung?

+0

Wenn '$ attributes' ist ein' Request' (oder 'Input') Beispiel könnten Sie tun' $ request-> nur ('Position '); ' –

Antwort

2

Ich graben im Laravel-Code und ich habe keinen guten Weg gefunden, um füllig noch bewacht Parameter zur Pivot-Klasse anzugeben, obwohl es eine Unterklasse von Model ist.

Dies bedeutet, dass Sie Ansatz ist schon ziemlich gut.

+0

Ich verstehe. Aber gibt es eine Möglichkeit, Eloquent zu erweitern, um Dinge wie "$ modell-> gehört zu viel (...) -> befüllbar (...)" zu machen? –

2

Probieren Sie es

$author = \Author::create($attributes); 
$author->documents()->attach($id,["position"=>$request->get('position')]); 

anzeigen Doc http://laravel.com/docs/5.0/eloquent#inserting-related-models

+0

Das macht schon das –

+0

Yeah. Es müssen immer noch Felder außerhalb des Modells beschrieben werden. Nur eine andere Perspektive. –

Verwandte Themen