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?
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? –
@AliSeyfi Nein, Sie müssen den aktuellen Standort des Modells manuell angeben. –