2016-11-17 1 views
0

Ich kann diesen Fehler nicht beheben, wenn ich versucht habe, eine Kategorie mit einer Transaktion zu verknüpfen.Laravel Relation Query/Find - Versuch, die Eigenschaft eines Nicht-Objekts zu erhalten

// 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; 
    } 

Der Fehler bei der Zeit auftritt: Error in TransactionController.php Linie 80: Eigenschaft von nicht-Objekt zu erhalten Versuch

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

Aber, wenn ich teste mein Code mit sterben, das ist das Ergebnis:

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"} 

// Transaktionsmodell

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

[] 's

+0

können Sie 'dd' den Inhalt von' $ transactions' –

+0

'Transaction :: find ($ data-> categories_id) -> category' Warum versuchen Sie eine' Transaktion' mit '' categories_id' zu finden? :/ – Doom5

+2

überprüfen Sie alle '$ data -> categories_id', einige haben möglicherweise nicht die Transaktions-ID. –

Antwort

0

Sie erhalten diesen Fehler als eine oder mehr $data->categories_id nicht die id auf der transactions Tabelle übereinstimmen.

Hinweis: Es ist keine gute Praxis zu find ein Modell und rufen eine Funktion auf es auf der gleichen Linie wie Sie getan haben.

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

Denn man weiß nie, was id wird als Argument an find() weitergegeben werden. Besser gehen für findOrFail().

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

$cat = $tran->category; 

Die findOrFail() Funktion wird eine ModelNotFoundException werfen, wenn die id in der transactions Tabelle stimmt nicht überein. Diese Ausnahme kann problemlos durch try...catch Block behandelt werden.

+0

Danke für die Antwort, ich werde findOrFail verwenden, es macht Sinn. Außerdem habe ich die Suche geändert, weil ich die Informationen aus der zugehörigen Kategorie abrufen musste. '$ cat = Kategorie :: findOrFail ($ data-> categories_id);'. –

Verwandte Themen