2016-04-19 4 views
0

Ich mache einen kleinen Ticket Buchungsservice. Mein Ziel ist es, das Ticketmodell mit zwei Benutzerinstanzen zu verknüpfen: 1. Der Manager, der das Ticket erstellt hat. 2. Der Benutzer, dem das Ticket gehört.Laravel: Zwei Fremdschlüssel von Ticket Model zu zwei Instanzen von User Model

Ich habe zwei Modelle:

Benutzer

Tisch

id 
name 
email 
manager 

Modell

public function myticket() { 
return $this->hasMany(App::Ticket); 
} //this is for the ticket owner 

public function createdticket() { 
return $this->hasMany(App::Ticket); 
} //this is for the manager who created the ticket 

Ticket

Tisch

id 
ticketcode 

$table->integer(user_id)->unsigned(); //the user who owns the ticket 
$table->foreign('user_id')->references('id')->on('users'); 

$table->integer(manager_id)->unsigned(); //the manager who created 
$table->foreign('manager_id')->references('id')->on('users'); 

Modell

public function user() { 
return $this->belongsTo(App::User); 
} //this is for the ticket owner 

public function createdby() { 
return $this->belongsTo(App::User); 
} //this is for the manager who created the ticket 

Wie kann ich meinen Code anpassen diesen beredten konform machen?

Antwort

1

Die einzige Sache ist das Hinzufügen von exakten Spalten in Ihre Beziehungen.

In User Modell sollte es sein:

public function myticket() 
{ 
    return $this->hasMany(App::Ticket, 'user_id'); 
} //this is for the ticket owner 

public function createdticket() 
{ 
    return $this->hasMany(App::Ticket, 'manager_id'); 
} //this is for the manager who created the ticket 

Und für Ticket Modell sollte es sein:

public function user() 
{ 
    return $this->belongsTo(App::User, 'user_id'); 
} //this is for the ticket owner 

public function createdBy() 
{ 
    return $this->belongsTo(App::User,'manager_id'); 
} //this is for the manager who created the ticket 

Sie user_id in diesen Beziehungen ignorieren kann, weil es standardmäßig ist, aber falls Sie haben Beziehungen mit anderen Namen und mehreren Benutzern für die Lesbarkeit ist es besser, sie aufzunehmen