【问题标题】:laravel eloquent hasmany relation returns when one row requiredlaravel eloquent hasmany 关系在需要一行时返回
【发布时间】:2014-12-22 08:06:52
【问题描述】:

这方面有很多问题,但我找不到合适的。我认为这是非常基本的 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"]

.. 但这仍然感觉不是很“laravel”.. 仍然会感谢任何关于更好方法的想法。

【问题讨论】:

    标签: php laravel collections eloquent


    【解决方案1】:

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

    【讨论】:

    • 我认为这只会给我一个属性,而我需要所有属性,每个属性只有一个相关图像。
    猜你喜欢
    • 2021-11-06
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 2014-10-29
    相关资源
    最近更新 更多