我正在尝试连接一个Order和两个不同的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('AppOrder', 'type_detail');
}
}
class OrderDetailType2 extends Model {
public function order() {
return $this->morphOne('AppOrder', 'type_detail');
}
}
class Order extends Model {
public function type_detail() {
return $this->morphTo();
}
}
并且我已经把Relation::morphMap()
放到了AppServiceProvider
类中的boot()
函数中。
use IlluminateDatabaseEloquentRelationsRelation;
class AppServiceProvider extends ServiceProvider {
public function boot() {
Relation::morphMap([
'type1' => 'AppOrderDetailType1',
'type2' => 'AppOrderDetailType2'
]);
}
}
该示例与我的代码不同。区别在于外键和指定要联接的表应在Order中的属性。所以我不能像示例那样使用morphTo((和morphOne((来解决这个问题。
我不知道哪些类应该包含morphTo((和morphOne((。是否有任何重载来指定哪个表具有外键和类型?
我使用Laravel 5.4。提前谢谢。
_id
列必须在Order
表中:
OrderDetailType1
- id
OrderDetailType2
- id
Order
- id
- detail_type
- detail_id
class OrderDetailType1 extends Model {
public function order() {
return $this->morphOne('AppOrder', 'detail');
}
}
class OrderDetailType2 extends Model {
public function order() {
return $this->morphOne('AppOrder', 'detail');
}
}
class Order extends Model {
public function detail() {
return $this->morphTo();
}
}