【问题标题】:Laravel querying model relationshipsLaravel 查询模型关系
【发布时间】:2014-01-18 15:45:50
【问题描述】:

有没有办法做类似的事情?

Picture::with('gallery')->where('gallery.path', $galleryPath)->first();

它应该搜索一条记录,但查询将应用于它的关系。

【问题讨论】:

    标签: model laravel relationship


    【解决方案1】:

    如果您使用的是 Laravel 4.1:

    $picture = Picture::whereHas('gallery', function($q) use ($galleryPath)
    {
        $q->where('path', $galleryPath);
    
    })->first();
    

    Laravel 4:

    $picture = Picture::with(array('gallery' => function($q) use ($galleryPath)
     {
       $q->where('path', $galleryPath); 
     }))->first();
    

    【讨论】:

    • 对我不起作用 :( 即使 Gallery::has('pictures')->get() 返回一个空数组。
    【解决方案2】:

    我相信你要找的是Eager Load Contraints

    您可以使用函数回调例如指定关系的条件

    Picture::with(array('gallery' => function($query) 
     {
       $query->where('path', $galleryPath); 
     }))->get();
    

    【讨论】:

    • 您的查询将返回所有图片记录,并急切加载并加入路径匹配的图库记录。它应该做的是仅加载那些具有与路径匹配的画廊的图片记录。你看出区别了吗?
    • 嗯,如果你使用的是 Laravel 4.1,你可以使用 whereHas 方法,该方法应该返回至少有一个具有指定条件的画廊的图片记录。
    猜你喜欢
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 2019-09-08
    • 2018-03-01
    • 2019-06-27
    • 1970-01-01
    • 2021-11-12
    相关资源
    最近更新 更多