有了Eloquent,我很难在三张桌子之间建立关系:
t_orders
列出了与
+----------+-------------+
| order_id | customer_id |
+----------+-------------+
| 1 | 5 |
| 2 | 3 |
| 3 | 1 |
+----------+-------------+
t_orders_items
列出每个订单的项目(fabrication_orders)
+----------+-------------------+
| order_id | fabrication_order |
+----------+-------------------+
| 1 | 1 |
| 1 | 2 |
| 2 | 3 |
| ... | ... |
+----------+-------------------+
最后t_customer
表给了我一些关于客户的信息
+-------------+---------------+
| customer_id | customer_name |
+-------------+---------------+
| 1 | Foo |
| 3 | Bar |
| 5 | Fun |
+-------------+---------------+
我只想知道给定的fabrication_order
(总是唯一的)关联的客户名称。因此,fabrication_order
= 2,我会得到Fun
。
阅读Eloquent的文档我认为t_orders
会以某种方式扮演数据透视表的角色。
所以我写了以下关系:
class OrderItem extends Model
{
...
public function customer(){
return
$this->belongsToMany('App\Customer', 't_orders','order_id',
'customer_id', 'order_id', 'customer_id');
}
}
唯一的缺点是它返回一个集合而不是唯一值。
"customer":[{"customer_id":5,"customer_name":"Fun"..}]
我希望实现:
"customer":{"customer_id":5,"customer_name":"Fun"..}
当然,收藏只有一个价值,但我想把事情写得更清洁。
答案 0 :(得分:1)
您可以使用两个单独的BelongsTo
关系:
OrderItem
→Order
,Order
→Customer
然后像这样访问客户:
$orderItem->order->customer
如果您需要它作为JSON字符串中的属性:
class OrderItem extends Model
{
$appends = ['customer'];
public function getCustomerAttribute() {
return $this->order->customer;
}
}