Laravel:belongsToMany包含其他字段

时间:2016-03-27 01:00:30

标签: laravel

对象Page具有任意数量的Widgets,每个Page-Widget对都有特殊选项(例如,位置,自定义标题)。

我刚刚做了

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

我向page_widget表添加了更多列(位置,设置......)。

我如何通过$page->widget->position访问/更新它们?我还需要能够获取按position排序的页面小部件。

请建议模型关系。感谢。

1 个答案:

答案 0 :(得分:2)

您可以添加以下额外字段:

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

然后,要在db中创建该行,请执行以下操作:

$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