2014-10-22 3 views
1

Я читал документы Laravel об определении отношений, и все это было для меня несколько неясным. (Может из-за языкового барьера ..)Laravel Model Relationships. Pure DB related

я получил следующее:

Я хочу, чтобы люди, чтобы выбрать цель. Если пользователь выбирает цель, появляются соответствующие пакеты. В этих пакетах есть информационная кнопка, содержащая дополнительную информацию о пакете. Если пользователь нажмет на информационную ссылку, появится информация о соответствующем пакете.

FYI! Будет 9 целей. Каждая цель имеет 3 пакета, и каждый пакет имеет 1 пакетinfo.

Objective Model 
// contains 
- id 
- name 
- icon 

// relationship 
HasMany package 

//////////////////////////////////////////////////// 
Package Model 
// contains 
- id 
- title 
- information 
- info_link 
- buy_link 

// relationship 
belongsToMany Model 
hasMany PackageInfo -- or has PackageInfo ? 

/////////////////////////////////////////////////// 
PackageInfo Model 
// contains 
- id 
- body 

// relationship 
belongsToMany Package -- or belongsTo Package ? 


////////////////////////////////////////////////// 
Objective_package Pivot 
- id 
- Objective_id 
- Package_id 

package_packageInfo pivot 
- id 
- Package_id 
- packageinfo_id 

Я определяю отношения правильно или действительно ли я прочитал весь документ как вверх дном?

ответ

0

Цель для упаковки отношений кажется правильным, но если есть только 1 packageinfo, то вам не нужен сводная таблица для этих отношений

//PackageInfo Model 
- id 
- package_id 
- body 

//relationship 
belongsTo Package 
$this->belongsTo('Package'); 

Самого быстрого ответом я могу дать, чтобы помочь объяснить это hasOne бы для данных, относящихся к родительскому объекту, но не всегда может потребоваться его потянуть. Как и у пользователя есть профиль. 90%, если не больше времени, когда вы не хотите, чтобы их биография или профиль, но этот профиль был эксклюзивным для этого Пользователя.

hasMany будет как Адреса. Пользователь может иметь несколько адресов для доставки или выставления счетов, но ни один другой пользователь не должен иметь доступ к этим данным, так что этот пользователь имеет много адресов.

. . .

принадлежит многому или многим многим, разделяется между несколькими объектами. Пользователь может иметь много ролей, а в роли будет много пользователей. Почта блога может иметь много тегов, и тег будет прикреплен ко многим сообщениям.

Полиморфный; вам может и не нужно беспокоиться, но идея заключается в том, что изображение может принадлежать множеству разных объектов, но по-разному. Как в элементе галереи, так и в миниатюре пользователя или в заголовке заголовка блога и т. Д. Это нарушает отображение реляционных данных в имени кода и повторного использования. Дискретизация рекомендуется, так как многие имеют разные мнения о том, как и когда использовать это.

Надеюсь, это поможет. Если есть что-нибудь, что я пытаюсь вам помочь, или если я пропустил то, что вы искали, сообщите мне.

+0

благодарит за ваш ответ и объяснение. Не будет только 1 packageInfo. foreach пакет, будет packageinfo. Я выполнил вышеизложенное в минуту и ​​поделюсь, если у меня возникнут какие-либо трудности! Опять же, спасибо, чувак :) PS. Ваше объяснение должно быть в документах .. имеет гораздо больше смысла, чем то, что находится в docs atm ... – Jeroen

+0

Ну, похоже, что отношения корректны. (я только пробовал его с целями и пакетами), если я использую отношения «многие-ко-многим», я могу получить связанные пакеты. С приведенным выше отношением ничего не появляется. Любая идея, как это может быть @dasper? – Jeroen

+0

Просто проснулся и пришел на работу. Позвольте мне провести несколько минут, повторив это на моем местном и посмотрю, что я могу найти. – dasper