2017-10-12 4 views
1

Ich habe 3 Modelle namens Customer, Receiver und Legal. Jedes Modell kann nur eine Karte haben und ich habe ein Modell namens Card erstellt., wie polymorphe Beziehungen und wie Modellstruktur sollte

das ist meine Karten Tabelle in der Datenbank

id | cardable_id | cardable_type | number    | ... 
-------------------------------------------------------------------- 
1 | 1   | Receiver | 6221-0612-0410-4907 | ... 
2 | 5   | Customer | 6301-4569-7896-4563 | ... 
3 | 2   | Legal  | 6748-8520-4569-9630 | ... 

My Card Modell

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Card extends Model 
{ 
    public function cardable() 
    { 
     return $this->morphTo(); 
    } 
} 

Meine Kunden Modell

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Customer extends Model 
{ 
    public function card() 
    { 
     return $this->morphOne(Card::class,'cardable'); 
    } 

} 

Mein Legal Modell

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Legal extends Model 
{ 
    public function card() 
    { 
     return $this->morphOne(Card::class,'cardable'); 
    } 
} 

And My Receiver Modell:

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Receiver extends Model 
{ 
    protected $guarded = ['id']; 

    public function card() 
    { 
     return $this->morphOne(Card::class,'cardable'); 
    } 
} 

In meinem router in web.php zum Testen Beziehungen schrieb ich den Code unten:

Route::get('test',function() { 
    $card = \App\Card::find(1); 
    return $card->cardable; 
}); 

und ich konfrontierte folgende Fehler:

Class 'Receiver' Not found.

Und wenn ich versuche, umgekehrte Beziehung zu verwenden:

Route::get('test2',function() { 
    $customer = \App\Customer::find(5); // a customer with id=5 does exist 
    return $customer->card; 
}); 

es gibt null zurück.
Ich versuche, eine Instanz Karte des Besitzers zu erhalten $card->cardable verwenden und auch eine Instanz von Karte $customer->card oder $receiver->card oder $legal->card
Was ich vermisst zu bekommen? Ist das die richtige Beziehung, die ich für meinen Zweck gewählt habe?

Antwort

2

cardable_type Link sein muss wie \App\Receiver

+0

zu modellieren Ihre Antwort ist richtig, dachte ich App-Ordner als Stammordner für diesen Zweck in Betracht gezogen wird. Gibt es eine Möglichkeit, Stammordner für Beziehungen zu ändern? –

+1

@AliSeyfi Nein, Sie müssen den aktuellen Standort des Modells manuell angeben. –

Verwandte Themen