2014-03-31 139 views
0

我收到以下錯誤,當我嘗試這個錯誤:調用未定義的方法照亮\數據庫\雄辯\收藏::選擇() 運行此:Laravel預先加載選擇列

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

,但這個工程。

Portfolio::find($id)->transactions 

我在我的投資組合模型

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

到真正的問題有關係所以現在。我怎樣才能使用預先加載從交易表中選擇某些字段?或者我需要使用查詢生成器來執行它

回答

0

您需要使用get而不是select。如果你想從數據庫中選擇某些特定的領域,那麼你可以傳遞一個數組到get方法,比如下面的例子:

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

所以我試過,並得到那裏的錯誤array_key_exists():第一個參數應該是一個字符串或一個整數 – brandenwagner

+0

使用事務(),而不是交易,因爲我在我的答案已經改變。如果你已經做了所有其他的事情,那就應該解決你的問題。 – SUB0DH

0

你可以試試這個:

$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')); 

檢查更多documentationeager loading