Ваш запрос возвращает коллекцию, потому что может быть несколько записей для вашей модели, возвращенных методом find
, который предоставляет Eloquent, поэтому вы можете использовать метод first
, например:
$estados = Estado::whereHas('proyectos', function ($query) {
$query->whereIn('id_estado', [2, 3])
->orderBy('fecha_estado', 'DESC');
})
->with('proyectos', function ($query) {
$query->whereIn('id_estado', [2, 3])
->orderBy('fecha_estado', 'DESC');
})
->first();
С помощью приведенного выше фрагмента для получения нескольких результатов, соответствующих этим условиям, вам нужно всего лишь заменить метод first
на get
. Приведенный выше код дает вам экземпляр единой модели Estado
. .
В противном случае, если вы собираетесь использовать что-то в соответствии с исходным подходом, вы можете использовать get
и возвращать коллекцию, вы можете перебирать их в цикле foreach:
$estados = Estado::whereHas('proyectos', function ($query) {
$query->orderBy('fecha_estado', 'DESC');
})
->with('proyectos')
->get();
foreach ($estados as $estado) {
$estado->proyectos->id;
}
Или вы можете получить доступ к элементам в коллекции, как к массиву, при условии, что вы знаете, что в ваших результатах обязательно есть запись:
$estados[0]->proyectos->id;
Если вы хотите получить только один результат, используйте EloquentМетод first
часто является лучшим вариантом для этого.
Надеюсь, это поможет!
Дополнительная информация:
Метод find
вEloquent может принимать либо одно значение, либо массив значений в качестве аргумента, и в случае, если ему не передано значение или массив значений передан, коллекция может быть возвращена, а не экземпляр одной модели. .
С другой стороны, метод get
можно использовать без предоставления каких-либо аргументов и каждый раз будет возвращать коллекцию (хотя они все равно могут не содержать элементов, если базовый запрос не дал результатов)