当需要一行时,laravel eloquent hasmany relation返回

时间:2014-10-27 07:10:30

标签: php laravel collections eloquent

这个领域有很多问题,但我找不到合适的问题。我认为这是Laravel非常基本的理解。

我在'properties'和'images'之间建立了一个简单的关系。对于特定的映射视图,我需要获取属性数据以及“lead”图像的文件名。因此,根据图像是否标记为“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

这显然是愚蠢的。我认为我只是在视图中忽略了一些简单的循环,但我可能误解了如何在控制器中解决这个问题。我想我现在已经阅读了大约20次laravel文档了,只是不能完全得到这个小细节。感谢。

更新 - 我刚刚接受了另一次,并设法通过在视图中执行此操作摆脱无意义的foreach:

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

..但这仍然感觉不到'laravel'..仍然会对更好的方法有任何想法。

1 个答案:

答案 0 :(得分:0)

尝试将->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);
        }