Laravel Eager Loading - 只加载特定的列

新手上路,请多包涵

我正在尝试在 laravel 中急切加载一个模型,但只返回某些列。我不希望呈现整个急切加载的表格。

 public function car()
{
    return $this->hasOne('Car', 'id')->get(['emailid','name']);
}

我收到以下错误:

log.ERROR: 异常 ‘Symfony\Component\Debug\Exception\FatalErrorException’ 消息 ‘调用未定义的方法 Illuminate\Database\Eloquent\Collection::getAndResetWheres()’

原文由 ipengineer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 324
2 个回答

使用 select() 方法:

 public function car() {
    return $this->hasOne('Car', 'id')->select(['owner_id', 'emailid', 'name']);
}

注意: 请记住添加分配给匹配两个表的外键的列。例如,在我的示例中,我假设 Owner 有一个 Car ,这意味着分配给外键的列类似于 owners.id = cars.owner_id I so-必须将 owner_id 添加到选定列的列表中;

原文由 rmobis 发布,翻译遵循 CC BY-SA 3.0 许可协议

此外,您不需要指定获取模型中的特定列和关系方法本身……您可以在需要时这样做……像这样:

 $owners = Owner::
          with([
              'car' => function($q)
               {
                    $q->select('id', 'owner_id', 'emailid', 'name');
               },
               'bike' => function($q)
               {
                    $q->select('id', 'owner_id', 'emailid', 'name');
               }
          ])->
          get();

通过这种方式,如果您需要的话,您还可以获得相关模型的所有列。

原文由 Ali 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏