我正在尝试连接一个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。预先谢谢你。
答案 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();
}
}