Отношение laravel eloquent hasmany возвращается, когда требуется одна строка

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

У меня есть простые отношения между «свойствами» и «изображениями». Для конкретного отображения мне нужно получить данные о свойствах вместе с именем файла «ведущего» изображения. Итак, мне нужен только один результат изображения, в зависимости от того, помечено ли изображение как «1» как ведущее изображение в БД.

Код контроллера выглядит так:

if(Input::get('m') == 'true'){
//$map_data = Property::all();

$map_data = Property::with(array('images' => function($query)
{
//just grab the lead image to put in the marker popups.
$query->where('is_lead', 1)->first();

}))->get();return View::make('property_map')->with('data', $map_data);
}

Но, по-моему, единственный способ заставить это работать — это цикл foreach, хотя мне нужен только один результат:

@foreach($property->images as $image)
{{$image->filename}}
@endforeach

Что, очевидно, глупо. Я думаю, что я просто упускаю что-то простое с этим циклом в представлении, но я, возможно, неправильно понял, как решить эту проблему в контроллере. Думаю, я прочитал документы по Laravel примерно 20 раз, но не могу понять эту маленькую деталь. Благодарю.

ОБНОВЛЕНИЕ — я только что сделал еще один шаг в этом, и мне удалось избавиться от бессмысленного foreach, выполнив это в представлении:

$property->images->first()["filename"]

.. но это все еще не кажется очень «легкомысленным» … все равно буду благодарен за любые мысли о лучшем способе сделать это.

3

Решение

Попробуйте изменить ->get() в ->first(),

if(Input::get('m') == 'true'){
//$map_data = Property::all();

$map_data = Property::with(array('images' => function($query)
{
//just grab the lead image to put in the marker popups.
$query->where('is_lead', 1)->first();

}))->first();return View::make('property_map')->with('data', $map_data);
}
0

Другие решения

Других решений пока нет …