2016-03-27 69 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 table_只是一個_join table_,它有多個列(例如''position')。 – 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