2013-05-31 10 views
22

Почему это не работает?Laravel Eloquent with and find

Article::with('category')->find($ids) 

У меня есть Array to String Conversion Exception.

Но если я разбить запрос на 2 части, как это:

$articles = Article::with('category') 

и

$articles = $articles->find($ids) 

я не получил каких-либо исключений и результат является правильным.

+2

Можете ли вы вставить трассировку стека исключения «преобразование массива в строку»? Насколько я помню, то, что вы впервые опубликовали, должно работать. ** Изменить: ** Убедитесь, что '$ ids' - это единственный идентификатор, а не массив идентификаторов. Если вы хотите найти статьи, в которых идентификатор находится в массиве, используйте 'where_in ('id', $ ids) -> get()'. –

+2

Хорошо, что он работает с whereIn! Спасибо! – Marco

ответ

14

Только для потомков ... другой путь вы можете сделать это:

Article::with('category')->whereIn('id', $ids)->get(); 

Это должно быть лучше (более результативным), потому что он оставляет запрос менеджеру базы данных

+0

Согласился, что это должен быть принятый ответ, так как он наиболее эффективен. Очень долгий путь. – AndrewMcLagan

+0

Другой ответ, представленный Адамом, который уже был опубликован три месяца назад, делает то же самое. Порядок вызовов «с» и «где» не имеет никакого значения. Оба одинаково хороши. – orrd

+1

Спасибо Орду, я действительно задавался вопросом, почему мой не был принят. Еще проще в L5 сейчас. Article :: with ('category') -> find ($ ids); – Adam

16

Try:

Article::with('category')->get()->find($ids); 

Вы должны получить статьи, прежде чем вы можете позвонить найти() я считаю.

Предупреждение: Это извлекает каждую статью из базы данных и загружает их все в память, а затем выбирает только одну из всех этих данных и возвращает ее. Вероятно, это не так, как вы хотели бы справиться с этой проблемой.

+0

Нет, это не работает. Я не получал никаких исключений, но красноречивый использовал только один идентификатор. И результат вашего решения равен нулю. Любые другие идеи? – Marco

+0

Делает ли 'var_dump (Article :: with ('category') -> first())' что-нибудь? –

+0

Да. Это правильно работает, и это работает правильно: 'Article :: with ('category') -> find (5)'. Но если я использую find с массивом, я получил Array для String Exception. Я смущен. – Marco

5

Это даст вам результаты, основанные на массив идентификаторов в Laravel 4

Article::whereIn('id', $ids)->with('category')->get(); 
+0

Это лучший способ, спасибо человеку! – in3pi2