2014-10-17 5 views
1

Я пытаюсь понять, что лучший способ сделать следующее.Laravel Eloquent - многие для многих, где для сводной таблицы

У меня есть 3 стола: пользователи, элементы и item_user.

таблицы пользователей и элементов довольно общие, id и несколько столбцов для хранения любых данных.

item_user таблица имеет следующую структуру идентификатор
item_id
user_id
user_type [1 - Владелец | 2 - Последователь | 3 - Что-то еще]

Отношения: Каждый элемент имеет 1 Владелец (тип пользователя)
Каждый элемент имеет много последователей
Каждый пользователь может владеть много Items
Каждый пользователь может следовать многие товары

Я бы подобно тому, как владелец и последователи являются таблицей «Пользователи», поэтому мне не нужно реплицировать данные пользователя. Я создал сводную таблицу item_id, user_id и user_type, чтобы сохранить эти отношения.

Итак, вопрос в том, как это сделать в Laravel Rloquent?

товара Модель выглядит следующим образом:

Модель
public function user() { 
    return $this->belongsToMany('Users'); 
    // This isn't actually correct since it belongs to only one User but not sure how to specify a where user_type = 1; 
    // return $this->belongsTo('User'); 
} 

Пользователь выглядит следующим образом:

public function item() { 
    return $this->hasMany('Item'); 
} 

Спасибо!

ответ

0

Вы можете просто добавить условие к вашей belongsToMany декларации:

public function user() { 
    return $this->belongsToMany('Users')->where('user_type', 1); 
} 

Это будет возвращать только User записи, которые имеют user_type = 1 в сводной таблице. И только для того, чтобы сделать это более понятным, вы можете назвать метод owner() вместо user(), чтобы отразить добавленное условие.