Я хочу создать (на Laravel 5.2) стержень между двумя объектами, предположим, что у нас есть сущности User и Phone. В нашем мире пользователь может иметь несколько телефонов, а на телефонах может быть несколько владельцев.Как создать сводную таблицу со связанным полем, отличным от id на Laravel 5.2
По какой-то причине я должен настроить таргетинг на телефон пользователя по его серийному номеру и году сборки (предположим, что сериалы не могут быть идентичными в том же году).
Итак, у меня есть мои столы 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
У меня есть отношения на моей модели телефона:
public function users()
{
return $this->belongsToMany(
User::class,
'users_phones',
'user_id',
'phone_serial'
)->withPivot('phone_build_year');
}
Когда я wan't добавить несколько записей так:
$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)
Моя проблема в том, что 5
в запросе sql - это идентификатор телефона, а не его серийный номер. Я не нашел, как точно в Laravel использовать поле, которое мы выбрали (здесь серийный), а не идентификатор.
Можно ли это сделать, или я осужден за создание модели для управления моей специальной сводной таблицей? Я признаю, что был бы признателен, если бы я мог избежать этого.
Laravel не позволяет делать это - он разрешает «первичный ключ» связанных моделей для 'ownToMany'. Вы можете либо использовать дополнительную модель для сводной таблицы, либо создать пользовательскую реализацию в отношении «BelongsToMany». –
Вот что я подумал, слишком плохо! Спасибо за ваш ответ. – Okipa