如何在Laravel 5.2上创建一个包含id以外的相关字段的数据透视表

时间:2016-03-04 18:53:43

标签: laravel-5 pivot relation

我想创建(在Laravel 5.2上)两个实体之间的一个支点,让我们假设我们有实体User和Phone。在我们的世界中,用户可以拥有多部手机,而手机可以拥有多个用户。

出于某种原因,我必须按用户的序列号和构建年份定位用户的电话(让我们假设连续剧在同一年不能相同)

所以我有我的表usersphonesusers_phones

===== Table users =====
id
username
...

===== Table phones ====
id
serial_numer
build_year

===== Table users_phones ====
user_id
phone_serial
phone_build_year

我的模特手机上有我的关系:

public function users()
{
    return $this->belongsToMany(
            User::class,
            'users_phones',
            'user_id',
            'phone_serial'
        )->withPivot('phone_build_year');
}

当我不想添加这样的条目时:

$phone->users()->attach([$user->id => [
    'phone_build_year'  => $phone->build_year
]]);

生成的SQL请求如下:

insert into `users_phones` (`user_id`, `phone_serial`, `phone_build_year`) values (1, 5, 2016)

我的问题是sql请求中的5是电话ID而不是其序列号。我没有找到如何精确地让Laravel使用我们选择的字段(这里是序列号)而不是id。

是否可以这样做,还是我被谴责创建一个模型来操纵我的特殊数据透视表?我承认,如果我能避免这种情况,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

所以,正如Jarek所说,似乎没有办法像我想的那样定制Laravel枢轴关系。我将创建一个专门针对这个特定案例的模型。 无论如何,如果有人有更优雅的方式在Laravel上做这种自定义枢轴关系,请分享你的知识!