在检索提供者和服务的订单时调用未定义的方法 Illuminate\Database\Query\Builder::with()
Call to undefined method Illuminate\Database\Query\Builder::with() when retrieving orders with providers and services
我正在尝试检索具有多对多关系的服务名称和提供商名称的订单。
此外,我想使用连接来获取客户端名称。
因此,我使用了下面的代码
$orders = DB::table('orders')
->join('users', 'orders.user', 'users.id')
->select('users.name As client', 'orders.id', 'orders.amount As amount','orders.description As description', 'orders.status As status')
->with('providers')
->with('services')
->where(['orders.status'=>1])
->get();
在订单模型 class 中,我实现了如下关系
public function providers()
{
return $this->belongsToMany(ServiceProvider::class)
->as('provider');
}
public function services()
{
return $this->belongsToMany(Service::class)
->as('service');
}
有了这个,我希望检索每个订单以及与之相关的所有服务和提供商,因为我有一个外键用户将订单链接到用户 table,我使用连接来获取名称作为客户下订单的用户。现在我的问题是这不起作用并且给出了上面的错误。这是否意味着数据库查询构建器中不存在 with() 方法?如果是这样,我可以使用什么方法与数据库查询生成器一起实现这一目标?如果有 none,我如何使用 eloquent ORM 来达到同样的目的?
当您使用 DB::table()
方法时,您没有使用您的模型,因此用于包含关系的 ->with()
方法不可用。要处理此问题,请使用您的模型:
$orders = Order::join('users', 'orders.user', 'users.id')
->select('users.name As client', 'orders.id', 'orders.amount As amount','orders.description As description', 'orders.status As status')
->with(['providers', 'services'])
->where('orders.status', 1)
->get();
其他修复:
->with()
方法可以接受关系数组以包括:
->with('providers')->with('services')
can be written as ->with(['providers', 'services'])
where()
方法可以接受多个 where 子句的数组,但对于单个 where 子句是不必要的:
->where(['orders.status'=>1])
is the same as ->where('orders.status', 1)
我正在尝试检索具有多对多关系的服务名称和提供商名称的订单。 此外,我想使用连接来获取客户端名称。 因此,我使用了下面的代码
$orders = DB::table('orders')
->join('users', 'orders.user', 'users.id')
->select('users.name As client', 'orders.id', 'orders.amount As amount','orders.description As description', 'orders.status As status')
->with('providers')
->with('services')
->where(['orders.status'=>1])
->get();
在订单模型 class 中,我实现了如下关系
public function providers()
{
return $this->belongsToMany(ServiceProvider::class)
->as('provider');
}
public function services()
{
return $this->belongsToMany(Service::class)
->as('service');
}
有了这个,我希望检索每个订单以及与之相关的所有服务和提供商,因为我有一个外键用户将订单链接到用户 table,我使用连接来获取名称作为客户下订单的用户。现在我的问题是这不起作用并且给出了上面的错误。这是否意味着数据库查询构建器中不存在 with() 方法?如果是这样,我可以使用什么方法与数据库查询生成器一起实现这一目标?如果有 none,我如何使用 eloquent ORM 来达到同样的目的?
当您使用 DB::table()
方法时,您没有使用您的模型,因此用于包含关系的 ->with()
方法不可用。要处理此问题,请使用您的模型:
$orders = Order::join('users', 'orders.user', 'users.id')
->select('users.name As client', 'orders.id', 'orders.amount As amount','orders.description As description', 'orders.status As status')
->with(['providers', 'services'])
->where('orders.status', 1)
->get();
其他修复:
->with()
方法可以接受关系数组以包括:
->with('providers')->with('services')
can be written as->with(['providers', 'services'])
where()
方法可以接受多个 where 子句的数组,但对于单个 where 子句是不必要的:
->where(['orders.status'=>1])
is the same as->where('orders.status', 1)