如何使用 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 users
、phones
和 users_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 上执行这种自定义枢轴关系,请分享您的知识!
我想在两个实体之间创建(在 Laravel 5.2 上)一个枢轴,假设我们有实体 User 和 Phone。在我们的世界中,一个用户可以拥有多个 phone,而一个 phone 可以拥有多个所有者。
出于某种原因,我必须通过序列号和构建年份来定位用户的 phone(假设同一年份的序列号不能相同)。
所以我有我的 tables users
、phones
和 users_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 上执行这种自定义枢轴关系,请分享您的知识!