У меня довольно сложная потребность в схемах пользователей, мне бы хотелось узнать лучший способ создания моделей в laravel 4. Я попытался использовать сводную таблицу, но без успеха. Для semplicity я помещаю только несколько полей в таблицу.Laravel 4 Model Eloquent relationship
пользователей
- ID
- имя
профили
- идентификатор
- поставщик
адреса
- ID
- country_id
- город
страны
- идентификатор
- имя
компании
- ID
- имя
магазины
- идентификатор
- имя
Вот правила:
- Пользователь может иметь много адресов (доставки, выставление счетов ...)
- Пользователь может иметь много профилей (Используется для социального логин, на facebook, google ...)
- Пользователя может иметь много компаний (пользователь может владеть несколькими компаниями)
- Пользователя может иметь много магазинов (пользователь может владеть несколькими магазинами)
- профиля может иметь один пользователь
- Адрес может иметь один пользователь (адрес может быть передан только один пользователь)
- адрес может иметь одну компанию (адрес может быть передан только одной компании)
- адрес может иметь один магазин
- адрес может иметь одно Страна
- Страна может иметь много адресов
- Компания может иметь много адресов (доставки, выставление счетов ...)
- Компания может иметь много магазинов
- Компания может иметь множество пользователей
- Магазин может иметь множество адресов (доставка, выставление счетов ...)
- магазин может иметь множество пользователей
- магазин может иметь один Компанию
Я не ищу «» ответ записана, я сделал модели, но, на мой взгляд, логика недостаточно хороша. Например, вот пользователь и Адрес Класс:
class User extends SentryUserModel implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
public function addresses() {
return $this->hasMany('Address');
}
}
class Address extends Eloquent {
public function user() {
return $this->belongsTo('User');
}
}
Построение модели таким образом, означает, что Eloquent рассчитывает найти в таблице адресов в поле «user_id». По моему мнению, лучше использовать сводную таблицу, потому что адрес может принадлежать пользователям, компаниям и магазинам, поэтому лучше иметь в таблице адресов поля user_id, company_id и shop_id или использовать три сводные таблицы (user_address, адрес company_address и магазин)?
Сводная таблица будет построена наверняка для пользователя и компании, потому что это очень много отношений.
После @MartinBean ответа я хочу поблагодарить его, но он работает, если в классе пользователя я использую
public function addresses() {
return $this->morphMany('Address', 'addressable');
}
и в классе Address я использую
public function addressable() {
return $this->morphTo();
}
В этом путь Я могу легко распечатать, чтобы получить первый текущий адрес пользователя
$user->addresses->first()->address
и получить электронную почту пользователя от первого адреса текущего пользователя
Address::first()->addressable->email
Но ты указал мне правильное направление, я думаю, полиморфного отношения, просто для понимания его лучше, почему бы не повернуть? И, как вы думаете, в любом случае для обеспечения взаимоотношений между пользователем и компанией требуется свод?
Что вы пробовали до сих пор? Stack Overflow не является веб-сайтом, чтобы заставить профессиональных разработчиков выполнять работу за вас бесплатно. –
Привет @MartinBean, читая лучше мой вопрос, вы правы, кажется, я прошу о работе, но это не тот случай, я написал обновление, пожалуйста, откатись от голосования. Спасибо – poisons
Я сделал «Адрес» полиморфным, потому что вы хотели иметь возможность использовать адреса в нескольких моделях. Для присоединения к моделям - как пользователь, принадлежащий компании, - тогда я бы использовал сводную таблицу. –