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。提前谢谢你。

【问题讨论】:

为什么要尝试使用多态关系?一个订单可以只有一个OrderDetailType1OrderDetailType2吗? Order 可以同时有OrderDetailType1OrderDetailType2,并且两者属性不同。 但是一个订单不能同时拥有这两个,对吧? 是的,订单不能同时拥有两者。 【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章

检索多态关系 laravel 的所有者

如何在laravel中获得多态关系?

Laravel 5分离/删除多态关系

Laravel - 渴望加载多态关系的相关模型

Laravel 一对多(多态)关系

(Laravel)通过数据透视表的多态关系