【问题标题】:Eloquent can I refer to model relationship in where?Eloquent 可以参考模型关系在哪里?
【发布时间】:2014-01-01 15:23:34
【问题描述】:

我有定义了适当的 belongsTo/hasMany 关系的模型,我想根据连接表的属性查询一个表。如果我在查询中定义连接,我可以做到这一点,但是我可以做些什么,这样我就不必在每次想要查询模型的关系时都定义连接?

例如。除非我定义了一个联接,否则以下内容不起作用:

FileAssociation::with('file')->where('files.file_type_version_id', $file->file_type_version_id)->get()

【问题讨论】:

    标签: php orm laravel eloquent


    【解决方案1】:

    我认为你想要的是 Eager Load Constraints 基本上你可以做到这一点

    FileAssociation::with(array('file' => function($query)
    {
      $query->where('file_type_version_id',$file->file_type_version_id);
    }))->get(); 
    

    查看Eager Loading 上的文档

    编辑

    如果你现在使用 Laravel 4.1,如果你想返回 FileAssociation,那么你可以访问 whereHas() 方法,前提是至少有一个“文件”

    FileAssociation::whereHas('file' => function($query)
    {
      $query->where('file_type_version_id',$file->file_type_version_id);
    })->get(); 
    

    查看Quering Relations上的文档

    【讨论】:

    • 不幸的是,这仍然会加载所有 FileAssociations,而不管急切加载的空结果集如何。之后你可以用它的过滤器方法解析雄辩的集合;尽管这可能是一项昂贵的操作。 +1 为急切的负载约束。
    • @DavidBarker 如果他使用的是 Laravel 4.1,我认为他可以使用 FileAssociation::whereHas('file') 我认为您可以确保至少有一个“文件”。
    • 那太棒了...我还没有机会查看 4.1 的更改,感谢您的提醒!
    • 嗯.. 我可能解释得不够清楚。我不想只在 type_version_id 相等时获取文件,我只想在文件的 type_version_id 相等时获取 result
    • @Damon 那么第一个查询应该返回那个?运行第一个查询时会得到什么?基本上,第一个查询应该加载 FileAssociation 以及所有满足 where 条件的 "File"(约束模型关系)。如果您愿意,您可以在最后获得结果之前对FileAssociation 应用更多条件(例如 ->where('something',$something)->get();
    猜你喜欢
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 2014-01-29
    • 1970-01-01
    相关资源
    最近更新 更多