2017-10-29 3 views
1

Ich möchte mein Modell haben, automatisch seine Beziehungen rufen, wenn instanziiert. Ab sofort sieht mein Modell wie folgt aus:Laravel Eloquent Modelle __construct Methode Beziehungen nennen

class AdminLog extends Model{ 
    public function __construct(){ 
     $this->belongsTo('App\User', 'admin_id'); 
    } 
} 

aber wenn ich versuche dd(AdminLog::get()->first()); zu tun, tut es keine Beziehungen zeigen.

Edit # 1: versucht parent::__construct(); in der __construct Methode des Modells, aber es hat nicht funktioniert.

Antwort

2

belongsTo()definiert eine Beziehung, es lädt es nicht.

Zuerst müssen Sie die Beziehung definieren, dann können Sie sie jederzeit mit der Methode load laden.

class AdminLog extends Model { 
    public function user() { 
     return $this->belongsTo(\App\User::class, 'admin_id'); 
    } 
} 

$log = AdminLog::first(); 
$log->load('user'); 

Es ist möglich, innerhalb des Konstruktors zu laden, aber ich würde dagegen nur sehr empfehlen. Wenn Sie 20 AdminLog Objekte haben, dann wird es die Datenbank 20 Mal abfragen, einmal für jedes Objekt. Das ist ineffizient.

Was Sie tun sollten, stattdessen ist eager loading verwenden. Dies wird der Benutzer-Tabelle nur einmal für alle 20 Admin-Protokolle abfragen. Es gibt viele Möglichkeiten, dies zu tun, hier ein Beispiel:

$logs = AdminLog::take(20) 
    ->with('user') 
    ->get(); 
dd($logs->toArray()); 
Verwandte Themen