我有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
获取卡片实例
我错过了什么?这是我为我的目的选择的正确关系吗?
答案 0 :(得分:2)
cardable_type
必须链接到\App\Receiver