如何检索多态关系以及模型结构应该如何
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
那样建模
我有 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