Eloquent:急切加载选择约束?可能?

时间:2014-03-07 12:45:38

标签: laravel-4 eloquent

基本上这是有效的

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',所以我的问题是,这甚至可能吗?

提前致谢。

3 个答案:

答案 0 :(得分:2)

啊,事实证明你必须在select子句中明确包含section_id:)

所以这将按预期工作:

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

答案 1 :(得分:0)

我使用iwyg的响应,但是我认为select内的第一个元素是连接这些表的键。在iwyg显示的示例中,表字段与表部分通过键section_id连接在一起,这就是为什么它是select内的第一个元素。

答案 2 :(得分:0)

最近几天我遇到了同样的问题,我找不到任何解决方案,因此,现在我已经找到了解决方案,我想与遇到相同问题的任何人共享该解决方案。  为了使用外键的in函数,您需要为表赋予函数外键。您要使用段的关系,因此需要为函数赋予值以查找关系,因此,如果在字段表中具有“ section_id”之类的关系,则需要使用此代码:

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

对于Laravel 5.7 *,您也可以使用“急切加载特定列”作为以下链接: enter link description here