Eloquent ORM следует за образцом активной записи. Это немного другой способ подумать о моделировании и взаимодействии с вашими данными, когда вы пришли от написания чистых операторов sql.
Настройка отношений комментариев - хороший шаг. Теперь вам нужно подумать о том, как вы взаимодействуете с вашими данными.
Вы можете получить всю информацию следующим утверждением:
$user = User::with('comments')->find(1);
С этим утверждением, вся информация пользователя загружается в $user
объект, и вся информация комментария загружается в $user->comments
Collection атрибут. Эта информация может быть доступна как так:
// get the info
$user = User::with('comments')->find(1);
// display some user info
echo $user->first_name;
echo $user->last_name;
// loop through the comment Collection
foreach($user->comments as $comment) {
// display some comment info
echo $comment->text;
}
with('comments')
раздел рассказывает запрос на нетерпеливые нагрузки всех комментарии для возвращенных пользователей (в данном случае, только один с идентификатором 1). Если вы не захотите их загрузить, они будут автоматически загружаться, когда вы попытаетесь получить к ним доступ. Вышеприведенный код будет работать точно так же без with('comments')
. Желательная загрузка становится более важной, если вы загружаете несколько родительских записей, а не только одну, поскольку она решает проблему N + 1. Вы можете прочитать о eager loading here.
Внимание (причина, я добавил новый ответ):
User::find(1)->with('comments')->get();
, иначе предложил, не собирается предоставлять информацию, которую вы ищете. На самом деле это приведет к возврату всех ваших пользователей с их загруженными комментариями. Вот почему:
Во-первых, User::find(1)
собирается вернуть одного пользователя с идентификатором 1, что хорошо. Тем не менее, он затем вызывает with('comments')
на этой модели, которая фактически создает новый экземпляр построителя запросов для таблицы users. Наконец, он вызывает get()
в этом новом экземпляре builder запроса, и поскольку он не имеет каких-либо ограничений на него, он вернет всех пользователей в таблице, причем все комментарии, прикрепленные к этим пользователям, будут загружены.
Он должен работать без активной загрузки. – kotapeter
Почему он должен работать без активной загрузки? Можете ли вы дать мне более подробную информацию? –
Яркая загрузка - это только решение для производительности. Он загружает все комментарии, когда вы находите пользователя. Если вы не используете загружаемую загрузку, комментарии будут загружаться при вводе: $ data-> comments. Ваше решение в порядке, но оно должно работать без активной загрузки. – kotapeter