如何检索多态关系以及模型结构应该如何

how to retrieve polymorphic relations and how model structure should be

我有 3 个模型,分别是 Customer、Receiver 和 Legal。每个模型只能有一张卡片,我创建了一个名为 Card 的模型。

这是我在数据库中的卡片 table

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  |  ...

我的卡模型

namespace App;

use Illuminate\Database\Eloquent\Model;

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

我的客户模型

namespace App;

use Illuminate\Database\Eloquent\Model;

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

}

我的法律模式

namespace App;

use Illuminate\Database\Eloquent\Model;

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

我的接收器型号:

namespace App;

use Illuminate\Database\Eloquent\Model;

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

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

为了测试关系,我在 web.php 的路线中编写了以下代码:

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

我遇到了以下错误:

Class 'Receiver' Not found.

当我尝试使用逆关系时:

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

它 returns 没有。
我正在尝试使用 $card->cardable 获取卡片所有者的实例,并使用 $customer->card$receiver->card$legal->card
获取卡片实例 我错过了什么?这是我为我的目的选择的正确关系吗?

cardable_type 必须是 link 才能像 \App\Receiver

那样建模