У меня есть три таблицы: пользователи, элементы и user_items. У пользователя много элементов, а элемент принадлежит многим пользователям.
**Users**
id
username
password
**Items**
id
name
**User_items**
id
user_id
item_id
Модели:
class User extends Eloquent {
public function items()
{
return $this->belongsToMany('Item', 'user_items', 'item_id', 'user_id');
}
}
class Item extends Eloquent {
public function users()
{
return $this->belongsToMany('User', 'user_items', 'user_id', 'item_id');
}
}
Мне нужно выбрать все элементы таблицы, распечатать его и выделить строки, которые принадлежат конкретному пользователю id = 1.
Выбор выделен вывод:
Какой правильный способ сделать это (в стиле Laravel)?
Вы можете использовать это так
public function user_items()
{
return $this->belongsToMany('User', 'user_items', 'user_id', 'item_id')->withPivot('id');
}
Таким образом, вы можете получить доступ к значениям третьей таблицы.
Некоторые полезные ссылки
http://www.developed.be/2013/08/30/laravel-4-pivot-table-example-attach-and-detach/
http://vegibit.com/many-to-many-relationships-in-laravel/
Вы можете сделать это так …
class User extends Eloquent {
public function items()
{
return $this->belongsToMany('Item', 'user_items', 'item_id', 'user_id')->withPivot('id');
}
}
class Item extends Eloquent {
public function users()
{
return $this->belongsToMany('User', 'user_items', 'user_id', 'item_id')->withPivot('id');
}
}
От контроллера ..
$user_id = 2;
Item::with(['users'=>function($q) use ($user_id){$q->where('user_id',$user_id);}])->get();
Во время просмотра списка вы можете выделить строку, просто воспользовавшись условием, поскольку каждый элемент -> пользователи пуст или нет.