【问题标题】:Get ID of saved pivot-item获取已保存数据透视项的 ID
【发布时间】:2019-10-19 20:35:42
【问题描述】:

我想解决以下问题:

我有一个模型 (Car),它作为与另一个带有数据透视表的模型 (Driver) 的关系加载。

汽车 -> 属于ToMany 驱动程序(带枢轴)-> 属于ToMany 附件(带枢轴)。

该模型又具有加载了枢轴的关系 (accessories)。

问题:模型Accessories 有两个可以根据其他因素加载的数据透视表。如果模型Accessories 作为Driver 的关系加载为Car 的关系,则应正确输出数据透视表。

这就是现在的样子:

 collect($request->input('data.driver'))->each(function ($driver) use
        (
            $car
        ) {

            $ndriver = Driver::findOrFail($driver['id']);

            $added = $car->driver()->save($driver, [
                'custom' => $driver['custom'],
                'title' => $driver['title'],
                'factor' => $driver['factor'],
            ]);

            /*Save attributes*/
            $added->syncDriverAttributes($driver['attributes']],
                $car->id);
        });

现在我应该在$added->syncDriverAttributes($driver['attributes'], $car->id); 中指定在$added 中创建的透视数据的透视ID。不幸的是,我目前无法找出枢轴 ID 是什么,因为它没有在 $added 中返回。

问题:我也无法从时间戳中找出最后一个数据透视 ID,因为所有条目都具有相同的时间戳。

所以我的问题是:我该如何解决?

【问题讨论】:

  • 数据透视表通常没有id 列。主键是被链接的两个模型键的组合。所以accessories_drivers 将有accessory_iddriver_id 作为复合主键。
  • 好的,我明白了。我在accessories_drivers 中添加了bigIncrements,希望我能得到回报。我还能如何解决该问题以将枢轴链接到特定的cardriveraccessory? Maybe I could generate a UUID and save this as pivot` 以用于$car->driver(),并将其作为pivot 中的外键引用以用于accessory?跨度>

标签: laravel eloquent laravel-6


【解决方案1】:

您当然可以这样做,但在定义您的关系时应该使用withPivot 方法来说明您希望拥有哪些附加字段:

public function driver()
{
   return $this->belongsToMany(Driver::class)->withPivot(['id']);
}

【讨论】:

    猜你喜欢
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 2021-01-23
    • 2021-10-20
    • 2017-10-28
    • 2015-12-11
    相关资源
    最近更新 更多