【发布时间】:2015-07-26 14:38:48
【问题描述】:
一个Order 有许多订购的物品
Order 的已订购商品 可以是 User 或 Product
我正在寻找一种将所有变形对象检索到Order 的方法。而不是$order->users 或$order->products 我想做$order->items。
我的进步
到目前为止,我的进展涉及Many To Many Polymorphic Relationship。
我的桌子:
orders
id - integer
orderables (the order items)
order_id - integer
orderable_id - integer
orderable_type - string
quantity - integer
price - double
-----------
users
id - integer
name - string
products
id - integer
name - string
这就是我创建订单并添加用户和产品的方式:
/**
* Order
* @var Order
*/
$order = new App\Order;
$order->save();
/**
* Add user to order
* @var [type]
*/
$user = \App\User::find(1);
$order->users()->sync([
$user->id => [
'quantity' => 1,
'price' => $user->price()
]
]);
/**
* Add product to order
* @var [type]
*/
$product = \App\product::find(1);
$order->products()->sync([
$product->id => [
'quantity' => 1,
'price' => $product->price()
]
]);
Order.php
/**
* Ordered users
* @return [type] [description]
*/
public function users() {
return $this->morphedByMany('Athliit\User', 'orderable');
}
/**
* Ordered products
*/
public function products() {
return $this->morphedByMany('Athliit\Product', 'orderable');
}
目前可以做
foreach($order->users as $user) {
echo $user->id;
}
或者..
foreach($order->products as $product) {
echo $product->id;
}
但我希望能够做一些类似的事情......
foreach($order->items as $item) {
// $item is either User or Product class
}
我找到了this 问题,这是我能找到的最接近我正在尝试做的事情,但我无法让它满足我的需求,它已经过时了,而且似乎就像一个非常hacky的解决方案。
有不同的方法吗?
如果您有与多态关系不同的方法,请告诉我。
【问题讨论】:
标签: php laravel laravel-5 eloquent