2016-12-24 4 views
0

Я просто попадаю в Laravel (5.3) и бегаю над реалистичными сценариями в моей голове, пытаясь понять, как бы я выполнил более сложные отношения между моделями/таблицами.Сложные отношения с Laravel/Eloquent

В моем примере здесь я создаю приложение для контактов. У пользователей много контактов, это легко. Более сложная часть - это определение контактных соединений. Скажем, у пользователя есть два контакта, которые являются сестрами. Пользователь может подключать эти два контакта, чтобы легко перемещаться между ними. Пользователь может назначить неограниченное количество подключений к контакту.

Итак, у меня, очевидно, есть таблица пользователей с идентификатором и таблицей контактов с идентификатором и поле user_id для присоединения к пользователю. Пользователь также может создавать несколько имен соединений. Как сестра." Когда пользователь создает новое имя подключения, я хочу сохранить его, чтобы они могли легко использовать одно и то же имя соединения позже с вводом типа ввода или чем-то еще. Таким образом, таблица connection_names имеет записи, привязанные к пользователю.

Таблица, с которой я столкнулся, представляет собой фактическую таблицу сводных соединений соединений. В любом случае, я считаю, что это сводная таблица. Тем не менее, новый для всей терминологии. Диаграмма kinda говорит все. Таблица соединений - это, в основном, все идентификаторы, подключающиеся к другим таблицам. Два идентификатора из таблицы контактов, устанавливающие соединение, и еще один идентификатор имени соединения.

Итак, во-первых, как в мире я устанавливаю модели для определения отношений связей в Laravel с красноречивым? И есть ли что-то, что я мог/должен делать лучше или более чисто? Кроме того, правильно ли я использую правила именования для Laravel/Eloquent, чтобы автоматически выбрать все или все это?

Большое спасибо! connections diagram

ответ

0

Если у вас есть $connection объект и хотите получить доступ к Contact объект (хост или подключенного пользователя), то вы можете использовать belongsTo как:

public function host() 
{ 
    return $this->belongsTo('App\Contact', 'contact_id'); 
} 

public function connection() 
{ 
    return $this->belongsTo('App\Contact', 'connection_id'); 
} 

И если у вас есть объект Contact модели и хотите получить доступ ко всему соединению, тогда вам необходимо установить belongsToMany как:

public function connection() 
{ 
    return $this->belongsToMany('App\Contact', 'connections', 'contact_id', 'connection_id'); 
} 

Ваши соглашения об именах выполнены правильно.

+0

Спасибо! Я сделаю это! – Mattaton

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