2016-03-27 21 views
0

オブジェクトPageには任意の数のWidgetsがあり、Page-Widgetのペアには特別なオプション(たとえば、位置、カスタムタイトルなど)があります。Laravel:追加のフィールドを持つbelongsToMany

私はちょうど

class Page extends Model { 
    public function widgets(){ 
     return $this->belongsToMany('App\Widget'); 
    } 
} 
... 
class Widget extends Model { 
} 

を作った私はpage_widgetテーブル(位置、設定...)に複数の列を追加しました。

どうすれば$page->widget->position経由でアクセス/更新できますか?また、ページウィジェットを取得する能力が必要です。それは、positionでソートされています。

モデル関係をお勧めします。ありがとう。

+0

多対多リレーションシップを持つと仮定すると、ピボットテーブル 'pages_widget'があります。そのテーブルに列を追加し、 'pivot'で値にアクセスすることができます。 [ドキュメント](https://laravel.com/docs/5.1/eloquent-relationships)の多対多リレーションシップ(中級のテーブルカラムの取得)の最後の部分をご覧ください。 –

+0

@milzコメントに追加するだけです。 _pivotテーブル_は、余分な列(たとえば、あなたの 'position')を持つ_joinテーブルです。 – Michael

答えて

1

あなたはこのような余分なフィールドを追加することができますデシベルで、その行を作成するために、次に

class Page extends Model { 
    public function widgets(){ 
     return $this->belongsToMany('App\Widget')->withPivot('position', 'settings); 
    } 
} 

を、あなたは:

$page->widgets()->attach($widgetId, ['position' => $position, 'settings' => $settings]); 

あなたがすることができるピボットテーブル内のデータにアクセスするには:

foreach ($page->widgets as $widget) { 
    echo $widget->pivot->position; 
    echo $widget->pivot->settings; 
} 

公式ドキュメントには多くの情報があります:https://laravel.com/docs/5.2/eloquent-relationships#many-to-many

関連する問題