如何使用 Laravel 5.2 上的 id 以外的相关字段创建数据透视表 table

How to create a pivot table with related field other than id on Laravel 5.2

我想在两个实体之间创建(在 Laravel 5.2 上)一个枢轴,假设我们有实体 User 和 Phone。在我们的世界中,一个用户可以拥有多个 phone,而一个 phone 可以拥有多个所有者。

出于某种原因,我必须通过序列号和构建年份来定位用户的 phone(假设同一年份的序列号不能相同)。

所以我有我的 tables usersphonesusers_phones

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

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

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

我和我的模特有关系 Phone :

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 是 phone id 而不是它的序列号。我没有找到如何精确到 Laravel 来使用我们选择的字段(这里是序列号)而不是 id。

是否可以这样做,或者我是否注定要创建一个模型来操纵我的特殊枢轴 table?我承认,如果我能避免这种方式,我将不胜感激。

因此,正如 Jarek 所说,似乎没有办法像我想的那样自定义 Laravel 枢轴关系。我将创建一个专用于此特定案例的模型。 无论如何,如果有人有更好更优雅的方法在 Laravel 上执行这种自定义枢轴关系,请分享您的知识!