Laravel 5 Laravel 5.4在人际关系中挣扎

Laravel 5 Laravel 5.4在人际关系中挣扎,laravel-5,relationship,Laravel 5,Relationship,我需要帮助处理Laravel 5.4关系 我有4张桌子: 用户(文件:id、名称等) 配置文件(字段:id、用户id、名字、姓氏) 订单(字段:id、用户id等) 订单项(字段:id、订单id、产品id等) 用户可以有一个配置文件 配置文件可以有一个用户 一个用户可以有许多订单 订单只有一个用户 一个订单可以有许多项目 在我的模型中: 用户: 简介: public function user() { return $this->belongsTo('App\User'); } 订

我需要帮助处理Laravel 5.4关系

我有4张桌子:

用户(文件:id、名称等)

配置文件(字段:id、用户id、名字、姓氏)

订单(字段:id、用户id等) 订单项(字段:id、订单id、产品id等)

用户可以有一个配置文件

配置文件可以有一个用户

一个用户可以有许多订单

订单只有一个用户

一个订单可以有许多项目

在我的模型中:

用户:

简介:

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');
}
我有两个问题:

一,。 显示订单时,我希望显示profiles表中的first_name和last_name列

在我的控制器中,我执行了以下操作: $user=user::find($order->user\u id)

我认为: {{$user->profile->fullName()}

有没有一种方法可以直接在视图中获取名称,而不首先在控制器中获取用户

二,

在我的订单模式中:

查看订单时,我希望显示所有订单项目以及每个项目的产品名称(产品->名称)

我很困惑,不知道怎么做

在我的控制器中,我尝试: 一,

获取错误:尝试获取非对象的属性

二,。 $items=Order::find($Order->id)->Order\u items

    foreach($items as $item) {
        echo $item->product->name;
    }
出现错误:

SQLSTATE[42S22]:未找到列:1054“where子句”中的未知列“products.order\u item\u id”(SQL:select*from
products
where
products
order\u item\u id
不为空限制1)

  • 你不必在眼前做任何事 在订单模型中,您需要创建与用户表的关系,如下所示:

    public function user(){
        return $this->belongsTo(User::class);
    }
    
    鉴于此,您只需写下以下内容:
    {{$order->user->profile->fullName()}

  • 如果您没有提到产品和订单项之间的关系。对于上面提到的关系,
    products
    表必须有一个
    order\u item\u id
    列。那么只有这句话就足够了:
  • $items=Order::find($Order->id)->Order\u items

    或者我建议使用下面的行而不是上面的行

    $items=$order->order\u items

    因为您已经有了
    $order
    对象,所以不需要使用
    id
    再次查询

  • 你不必在眼前做任何事 在订单模型中,您需要创建与用户表的关系,如下所示:

    public function user(){
        return $this->belongsTo(User::class);
    }
    
    鉴于此,您只需写下以下内容:
    {{$order->user->profile->fullName()}

  • 如果您没有提到产品和订单项之间的关系。对于上面提到的关系,
    products
    表必须有一个
    order\u item\u id
    列。那么只有这句话就足够了:
  • $items=Order::find($Order->id)->Order\u items

    或者我建议使用下面的行而不是上面的行

    $items=$order->order\u items

    因为您已经有了
    $order
    对象,所以不需要使用
    id
    再次查询

  • 你能行

    Profile::where('user_id', $order->user_id)->first();
    
  •  Order::with('order_items.product')->find($order->id);
    
  • 这应该对你有用

  • 你能行

    Profile::where('user_id', $order->user_id)->first();
    
  •  Order::with('order_items.product')->find($order->id);
    

  • 这应该适用于您

    谢谢,但对于订购产品,我收到以下错误:SQLSTATE[42S22]:未找到列:1054未知列“products.order\u item\u id”在“where子句”中(SQL:select*from
    products
    where
    products
    在(1,2)中订购\u item\u id),谢谢,但是对于带有产品的订单,我得到了这个错误:SQLSTATE[42S22]:未找到列:1054未知列“products.order\u item\u id”在“where子句”(SQL:select*from
    products
    where
    products
    (1,2))中谢谢,我不明白为什么我需要在products表中添加order\u item\u id。products表具有id,order_items表具有product_id,这是关系$order->order\u items不返回产品名称,如何获取产品名称?好的,设法使其正常工作:在我的产品模型中,我有一个orderItem,在我的orderItem中,我有一个属于产品的orderItem。现在$order->order\u items也给了我产品名称。谢谢谢谢谢谢,我不明白为什么我需要在products表中添加order\u item\u id。products表具有id,order_items表具有product_id,这是关系$order->order\u items不返回产品名称,如何获取产品名称?好的,设法使其正常工作:在我的产品模型中,我有一个orderItem,在我的orderItem中,我有一个属于产品的orderItem。现在$order->order\u items也给了我产品名称。非常感谢。