Есть много вопросов в этой области, но я не могу найти тот, который подходит. Я думаю, что это очень базовое понимание 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"]
.. но это все еще не кажется очень «легкомысленным» … все равно буду благодарен за любые мысли о лучшем способе сделать это.
Попробуйте изменить ->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);
}
Других решений пока нет …