我需要Laravel 5.4关系的帮助。
我有4张桌子:
用户(fileds:id,name等)
个人资料(字段:id,user_id,first_name,last_name)
订单(字段:id,user_id等) order_items(字段:id,order_id,product_id等)
用户可以拥有一个个人资料
个人资料可以有一个用户
用户可以拥有多个订单
订单有一个用户
订单可以包含多个商品
在我的模特中:
用户:
public function profile()
{
return $this->hasOne('App\Profile');
}
public function orders()
{
return $this->hasMany('App\Order');
}
资料:
public function user()
{
return $this->belongsTo('App\User');
}
订单:
public function user()
{
return $this->hasOne('App\User');
}
public function order_items()
{
return $this->hasMany('App\OrderItem');
}
OrderItem的:
public function order()
{
return $this->belongsTo('App\Order');
}
public function product()
{
return $this->hasOne('App\Product');
}
我有两个问题:
1。 当我显示订单时,我想显示配置文件表中的first_name和last_name列。
在我的控制器中,我这样做了: $ user = User :: find($ order-> user_id);
在我看来: {{$ user-> profile-> fullName()}}
有没有办法直接在视图中获取名称而不是首先在控制器中获取用户?
2
在我的订单模型中:
当我查看订单时,我想显示每个商品的所有订单商品和商品名称(产品 - >名称)。
我很困惑,不知道该怎么做。
在我的控制器中我尝试过: 1。
$items = Order::find($order->id)->order_items->with('product');
出错:尝试获取非对象的属性
2。 $ items = Order :: find($ order-> id) - > order_items;
foreach($items as $item) {
echo $item->product->name;
}
出现错误:
SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'products.order_item_id'(SQL:select * from products
其中products
。order_item_id
= 1和products
。order_item_id
不是空限制1)
答案 0 :(得分:0)
在订购模型中,您需要与用户表创建关系,如下所示:
public function user(){
return $this->belongsTo(User::class);
}
在视图中你只需要写这样的东西:
{{ $order->user->profile->fullName() }}
products
表必须有order_item_id
列。那么只有这个陈述就足够了: $items = Order::find($order->id)->order_items
或者我建议使用以下行而不是上面的
$items = $order->order_items
因为您已经拥有$order
对象,因此您无需再次使用id
进行查询。
答案 1 :(得分:0)
你可以做到
Profile::where('user_id', $order->user_id)->first();
待办事项
Order::with('order_items.product')->find($order->id);
这应该对你有用