Laravel 多态关系返回 null
Posted
技术标签:
【中文标题】Laravel 多态关系返回 null【英文标题】:Laravel polymorphic relationships return null 【发布时间】:2019-01-12 02:38:28 【问题描述】:我正在尝试加入一个 Order 和 2 个不同的 OrderDetailType 表。
OrderDetailType1
- id
- order_id
OrderDetailType2
- id
- order_id
Order
- id
- detail_type 'type1' or 'type2'
我在 Laravel 官方网站上遵循了多态关系示例并适应了我的代码,例如:
class OrderDetailType1 extends Model
public function order()
return $this->morphOne('App\Order', 'type_detail');
class OrderDetailType2 extends Model
public function order()
return $this->morphOne('App\Order', 'type_detail');
class Order extends Model
public function type_detail()
return $this->morphTo();
而且我已经将Relation::morphMap()
放入AppServiceProvider
类中的boot()
函数中。
use Illuminate\Database\Eloquent\Relations\Relation;
class AppServiceProvider extends ServiceProvider
public function boot()
Relation::morphMap([
'type1' => 'App\OrderDetailType1',
'type2' => 'App\OrderDetailType2'
]);
该示例与我的代码不同。区别在于外键和指定要连接的表的属性应按顺序排列。所以我不能像例子那样使用 morphTo() 和 morphOne() 来解决这个问题。
我很困惑哪些类应该包含 morphTo() 和 morphOne()。并且是否有任何重载来指定哪个表具有外键和类型?
我使用 Laravel 5.4。提前谢谢你。
【问题讨论】:
为什么要尝试使用多态关系?一个订单可以只有一个OrderDetailType1
或OrderDetailType2
吗?
Order 可以同时有OrderDetailType1
或OrderDetailType2
,并且两者属性不同。
但是一个订单不能同时拥有这两个,对吧?
是的,订单不能同时拥有两者。
【参考方案1】:
_id
列必须在 Order
表中:
OrderDetailType1
- id
OrderDetailType2
- id
Order
- id
- detail_type
- detail_id
class OrderDetailType1 extends Model
public function order()
return $this->morphOne('App\Order', 'detail');
class OrderDetailType2 extends Model
public function order()
return $this->morphOne('App\Order', 'detail');
class Order extends Model
public function detail()
return $this->morphTo();
【讨论】:
您能否就答案提供反馈?以上是关于Laravel 多态关系返回 null的主要内容,如果未能解决你的问题,请参考以下文章