【问题标题】:Eloquent: eager loading with select constraints? possible?雄辩:用选择约束急切加载?可能的?
【发布时间】:2014-03-07 12:45:38
【问题描述】:

基本上是这样的

Section::with('fields')->find($id);

还有:

Section::with(['fields' => function ($q) {
    $q->select('*');
}])->find($id);

然而:

Section::with(['fields' => function ($q) {
    $q->select('label', 'position');
}])->find($id);

不会加载关系。

除了使用“where”之外,我还没有在文档中找到有关急切加载约束的内容,所以我的问题是,这是否可能?

提前致谢。

【问题讨论】:

    标签: laravel-4 eloquent


    【解决方案1】:

    啊,原来你必须在 select 子句中明确包含 section_id :)

    所以这将按预期工作:

    Section::with(['fields' => function ($q) {
        $q->select('section_id', 'label', 'position');
    }])->find($id);
    

    【讨论】:

    • 包括 ID 是关键。我发现的其他答案都没有提到这一点。感谢您的跟进!
    【解决方案2】:

    前几天我遇到了同样的问题,但我找不到任何解决方案,所以现在我找到了解决方案,我想与遇到同样问题的任何人分享。 为了在函数中使用外键,您需要为函数提供表的外键,因此在这种情况下,例如;您想使用部分的关系,因此您需要为函数提供值以查找关系,所以如果您在字段表中有类似“section_id”的关系,则需要使用此代码:

    Section::with(['fields' => function ($q) {
    $q->select('id','section_id','label', 'position');
    }])->find($id);
    

    对于 Laravel 5.7*,您也可以使用 Eager Loading Specific Columns,如下链接所示: enter link description here

    【讨论】:

      【解决方案3】:

      我使用@iwyg的响应,但重要的是select里面的第一个元素是连接这些表的字段(外键)。

      在@iwyg 展示的示例中,表字段与键为section_id 的表部分连接,这就是为什么选择中的第一个元素。所以不仅仅是添加 id 让它工作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-22
        • 2019-09-14
        • 1970-01-01
        • 2018-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多