Laravel Eager加载选择列

时间:2014-03-31 01:49:05

标签: php laravel-4 eloquent

当我尝试此错误时出现以下错误:调用未定义的方法Illuminate \ Database \ Eloquent \ Collection :: select() 运行这个:

Portfolio::find($id)->transactions
        ->select('id','date','symbol','transaction_type','qty','amount');

但这很有效。

Portfolio::find($id)->transactions

我的投资组合模型与

有关系
$this->hasMany('Transaction','portfolio_id');

现在谈到真正的问题。如何使用预先加载从事务表中选择某些字段?或者我是否需要使用查询构建器

来执行此操作

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

$portfolio = Portfolio::with(array('transactions' => function($q){
    $q->select(array('id','date','symbol','transaction_type','qty','amount'));
}))->whereId($id)->first();

这会返回Portfolio模型以及相关的transactions,您可以使用以下内容:

$portfolio->transactions->first()->amount

另外,你可以循环它们。但是下面将只给出相关模型:

Portfolio::find($id)->transactions()
         ->get(array('id','date','symbol','transaction_type','qty','amount'));

documentation上查看有关eager loading的更多信息。

答案 1 :(得分:0)

您需要使用get代替select。如果只想从数据库中选择某些特定字段,则可以将数组传递给get方法,如下例所示:

Portfolio::find($id)->transactions()
        ->get(array('id','date','symbol','transaction_type','qty','amount'));