2016-12-13 3 views
1

Хотя подобный вопрос задан, но в другом контексте. Laravel Eloquent with and findLaravel Eloquent - используя "With" вместе с "find"

Проблема У меня есть прямо сейчас, когда я использую «найти», он возвращает объект, а не коллекцию.

MyModel::find($myId) 

Но когда я использую «с» он возвращает мне коллекцию. Не должен быть один объект с энергичной загрузкой всех необходимых данных?

MyModel::find($myId)->with('notes') 

Я ожидаю, что он вернет один объект с нетерпением, загружая заметки. Но его возвращение коллекции. Поэтому я должен получить первый объект коллекции, а затем в нем загруженные записки. Но когда я делаю что-то вроде

MyModel::find($myId)->with('notes')->first() 

Он возвращает единственный объект, который является правильным, но не имеет смысла для меня, как я прочитал на форуме, что laracast «первый» за сценой использует " найти ". Так что мне действительно нужно использовать «найти» и «первым» вместе, чтобы получить требуемые данные или есть что-то, что я делаю неправильно?

PS Я использую Laravel 5.3

+0

Try MyModel :: with ('ноты') -> находка ($ MyId); – Dev

+0

Отлично, он действительно работал. Но можете ли вы объяснить поток этих двух методологий? –

+0

Об этом уже говорил Алексей Мезенин. – Dev

ответ

2

Используйте его таким образом, чтобы получить объект коллекции:

MyModel::with('notes')->find($myId); 

https://laravel.com/docs/5.3/eloquent-relationships#eager-loading

И это нужно просто вернуть экземпляр построителя запроса:

MyModel::find($myId)->with('notes') 
+1

Yup, это действительно сработало. Тот, который я опубликовал, это то, что я видел в одном из видео laracast, но он не использовал «с». Спасибо за исправление. –

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