2016-03-04 1 views
0

Я хочу создать (на 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 использовать поле, которое мы выбрали (здесь серийный), а не идентификатор.

Можно ли это сделать, или я осужден за создание модели для управления моей специальной сводной таблицей? Я признаю, что был бы признателен, если бы я мог избежать этого.

+1

Laravel не позволяет делать это - он разрешает «первичный ключ» связанных моделей для 'ownToMany'. Вы можете либо использовать дополнительную модель для сводной таблицы, либо создать пользовательскую реализацию в отношении «BelongsToMany». –

+0

Вот что я подумал, слишком плохо! Спасибо за ваш ответ. – Okipa

ответ

0

Итак, как говорит Джарек, кажется, что нет возможности настроить отношения стержня Laravel, как я бы хотел. Я создам модель, посвященную этому конкретному случаю. В любом случае, если у кого-то есть лучший и изящный способ сделать это обычное отношение на основе Laravel, пожалуйста, поделитесь своими знаниями!

Смежные вопросы