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

时间:2017-10-12 14:19:22

标签: php laravel laravel-5.5

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

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

std::static_pointer_cast

我的卡片型号

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');
    }
}

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

namespace App;

use Illuminate\Database\Eloquent\Model;

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

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

我遇到了以下错误:

  

未找到“接收者”类别。

当我尝试使用反向关系时:

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

它返回null 我正在尝试使用Route::get('test2',function () { $customer = \App\Customer::find(5); // a customer with id=5 does exist return $customer->card; }); 获取卡片所有者的实例,并使用$card->cardable$customer->card$receiver->card获取卡片实例 我错过了什么?这是我为我的目的选择的正确关系吗?

1 个答案:

答案 0 :(得分:2)

cardable_type必须链接到\App\Receiver

之类的模型