【问题标题】:Laravel Eager loading select columnsLaravel Eager 加载选择列
【发布时间】:2014-05-10 06:03:00
【问题描述】:

尝试此错误时出现以下错误:调用未定义的方法 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');

现在回到真正的问题。如何使用预先加载从事务表中选择某些字段?还是我需要使用查询生成器来完成它

【问题讨论】:

    标签: php laravel-4 eloquent


    【解决方案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 的信息。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 所以我试了一下,结果出现错误 array_key_exists(): The first argument should be a string or an integer
      • 使用 transactions() 而不是 transactions,因为我在答案中已更改。如果您已正确完成其他所有操作,那么这应该可以解决您的问题。
      猜你喜欢
      • 1970-01-01
      • 2013-06-04
      • 2018-01-10
      • 2017-05-23
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多