【发布时间】:2017-08-20 10:50:52
【问题描述】:
我需要 Laravel 5.4 关系方面的帮助。
我有 4 张桌子:
用户(文件:id、名称等)
个人资料(字段: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');
}
订单项:
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.
在我的订单模型中:
当我查看订单时,我想显示所有订单商品以及每个商品的产品名称(product->name)。
我很困惑,不知道该怎么做。
在我的控制器中,我尝试了: 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 where products.order_item_id = 1 和 products.@ 987654331@ 不为空限制 1)
【问题讨论】: