2016-11-17 40 views
0

當我嘗試將關聯類別與事務關聯時,我無法解決此錯誤。Laravel關係查詢/查找 - 嘗試獲取非對象的屬性

// TransactionController

$transactions = DB::table('transactions') 
     ->where('status', 'false') 
     ->orderBy('date','asc') 
     ->get();   

     foreach($transactions as $data) { 
      $transaction = new Transaction(); 
      $transaction->id = $data->id; 
      $transaction->category = Transaction::find($data->categories_id)->category; 
      $transaction->description = $data->description; 
    } 

在時間出現的錯誤: ErrorException在TransactionController.php線80: 試圖讓非對象

Line 80: $transaction->category = Transaction::find($data->categories_id)->category; 

的財產,但如果我測試我的代碼與死亡,結果如下:

die(Transaction::find($data->categories_id)->category()->first()); 

{"id":1,"users_id":1,"description":"Alimenta\u00e7\u00e3o","created_at":"2016-11-15 20:31:11","updated_at":"2016-11-15 20:31:11"} 

//事務模型

class Transaction extends Model 
{ 
    public function category(){ 
     return $this->hasOne('App\Category','id'); 
    } 

+0

你能'dd'的內容'$ transactions' –

+0

'Transaction :: find($ data-> categories_id) - > category'你爲什麼試圖通過'categories_id'找到一個'Transaction'? :/ – Doom5

+2

檢查所有'$ data-> categories_id',有些可能沒有事務ID。 –

回答

0

你得到的是錯誤的一個或多個$data->categories_id沒有在transactions表匹配id []。

注: 這不是一個很好的做法,find模型,並在同一行調用它的功能,你已經做了。

Transaction::find($data->categories_id)->category;

因爲,你永遠不知道什麼id將作爲參數傳遞給find()。 最好去findOrFail()

$tran = Transaction::findOrFail($data->categories_id); 

$cat = $tran->category; 

findOrFail()功能會拋出一個ModelNotFoundException每當id不會在transactions表相匹配。這個異常可以通過try...catch塊輕鬆處理。

+0

感謝您的回答,我將使用findOrFail,它非常有意義。此外,我改變了搜索,因爲我需要從關聯的類別中檢索信息。 '$ cat = Category :: findOrFail($ data-> categories_id);'。 –

相關問題