Laravel多态关系返回null

时间:2018-08-04 12:27:16

标签: laravel polymorphism relationships

我正在尝试连接一个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()放在boot()类的AppServiceProvider函数中。

use Illuminate\Database\Eloquent\Relations\Relation;

class AppServiceProvider extends ServiceProvider {

    public function boot() {
        Relation::morphMap([
            'type1' => 'App\OrderDetailType1',
            'type2' => 'App\OrderDetailType2'
        ]);
    }
}

该示例与我的代码不同。区别在于外键和用于指定要联接的表的属性都应在Order中。所以我不能像示例一样使用morphTo()和morphOne()来解决这个问题。

我混淆哪些类应包含morphTo()和morphOne()。是否有重载来指定哪个表具有外键和类型?

我使用Laravel 5.4。预先谢谢你。

1 个答案:

答案 0 :(得分: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();
    }

}