2016-07-23 6 views
1

У меня есть таблица под названием users. Каждый из этих пользователей имеет разные вещи:Как вернуть несколько отношений с Laravel Rloquent?

  • страна
  • устройство
  • компьютер
  • категории

Я создал таблицу для каждого из этих вышеупомянутых 'вещей'. Аналогично следующее:

1 | United States 
2 | United Kingdom 
3 | Australia 
4 | Canada 
5 | Italy 

и т.д ...

Я хранить эти значения в таблице пользователей следующим образом:

ID | Country | Device | Computer | Category | 
---|---------|--------|----------|----------| 
1 |  3 |  2 |  6 |  2 | 
2 |  4 |  3 |  9 |  1 | 

и т.д ...

Теперь каждый из указанные выше номера связаны с идентификатором соответствующей таблицы.

То, что я хочу, - это «Красноречивый запрос» и поиск всех users и «замена» их соответствующих значений из их вспомогательной таблицы.

Я думал о том, чтобы делать hasOne() Зловонные отношения для каждой из этих вещей в таблице users, но тогда я не уверен, как их сразу вызвать.

Кто-нибудь может помочь мне решить эту проблему?

+0

Я считаю, что это трудно поверить, что вы используете Laravel версию 4, 5 и 5.2, в то же время – Jonathan

+0

Исправьте тег в соответствующую версию Laravel вы используете. –

+0

@ Джонатан Извините за путаницу, все сделано. –

ответ

4
$model = Model::with('relatedModel', 'relatedModelTwo')->get(); 

Так что в вашем случае, это может быть что-то вроде этого. Если вам нужны только те отношения, которые были возвращены с user, удалите остальные.

$user = User::with('country', 'Device', 'Computer', 'Category')->get(); 

Когда вы dd($user), вы должны увидеть соответствующие модели в атрибуте relations массива.

Для доступа к свойствам отношений оттуда, это просто

$user->device->deviceAttribute

Редактировать Для Комментарий:

Eloquent будет считать, что внешний ключ использует имя модели. Поэтому, если таблица user имеет столбец id, предполагается, что будет столбец на таблице device под названием user_id. Если вы это сделали, тогда вы настроены, и ничего не должно быть сделано.

Если вы назвали ваш столбец, чтобы связать модели с чем-то другим, вам необходимо передать это как второй аргумент в методе отношений.

public function device() 
{ 
    return $this->hasOne('App\Device', 'foreign_key_here',); 
} 

И наоборот, если вы хотите, чтобы заставить пользователя устройство принадлежит, Красноречивым будет пытаться соответствовать user_id колонки на столе устройства к id колонке таблицы пользователя. Как и раньше, если вы использовали другой столбец для их сопоставления, объявите внешний ключ в качестве второго аргумента.

public function user() 
{ 
    return $this->belongsTo('App\User', 'foreign_key_here',); 
} 

Laravel Doc One-To-One Relation

+0

Спасибо за ваш ответ, он в целом обменивается всем. Осталось только одно. Как мне создать отношения, чтобы я мог получить правильное значение для идентификатора атрибута? –

+0

@Radical_Activity, чтобы убедиться, что у вас есть соответствующее устройство, компьютер и т. Д. Для пользователя? –

+0

Да, точно. Может быть, с 'hasMany'? На устройстве, компьютере и т. Д.? –

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