当主键是相关模型的另一列时,BelongToMany。

问题描述 投票:1回答:1

我有两个表 小部件page_widget

PageWidget模型。

protected $fillable = [
    'page_id',
    'widget_codes',
    'created_by',
    'updated_by',
    'deleted_by',
    'deleted_at'
];

relation in this model:

public function widgets() {
    return $this->belongsToMany(Widget::class, null, 'page_widget_ids',
        'widget_codes');

}

widget模型:

protected $fillable = [
    'name',
    'code',
    'type',
    'page_widget_ids',
    'created_by',
    'deleted_by',
    'deleted_at'
];

在存储的时候,我必须同步widget_code,我用了这样的方法。

$pageWidget->widgets()->sync($input['widget_codes']);

这不行,因为在widget模型中,默认的主键被认为是... ... 身份证 列,我想给关系与 编码 专栏

我尝试在部件模型中使用$primaryKey = 'code',但我不能使用这个,因为部件模型的其他关系使用的是 身份证 栏,我有两个表widget和page_widget

laravel primary-key has-and-belongs-to-many jenssegers-mongodb
1个回答
0
投票

当使用多对多关系时,你需要三个表 page_widget, page_widget_widgetwidget.

网页小工具 模型模式应该是这样的

protected $fillable = [
    'id',
    'created_by',
    'updated_by',
    'deleted_by',
    'deleted_at'
];

小工具 模式图应该是这样的

protected $fillable = [
    'name',
    'code', //primary_key
    'type',
    'created_by',
    'deleted_by',
    'deleted_at'
];

还有 page_widget_widget 表应该有一个 id, page_widget_idwidget_code 列。

之后,将你的关系更新到这个

public function widgets() {
    return $this->belongsToMany(Widget::class, 'page_widget_widget', 'page_widget_id', 'widget_code');

}

你的同步功能现在应该可以用了。

© www.soinside.com 2019 - 2024. All rights reserved.