Eloquent 查询与嵌套 WHERE 的关系
Eloquent with query on relations with nested WHERE
我正在努力 Eloquent 查询关系。
比如我只找没有交易的客户John
如何使用 Eloquent 执行此操作?
客户端模型关系
public function transactions()
{
return $this->hasMany(Transaction::class);
}
$results = Client::whereDoesntHave('transactions', function ($query) use ($inputFirst, $period) {
$query->where('transactions.period_id', '=', $period->id)
->where('firstname', '=', $inputFirst);
})
->orderBy('id', 'desc')
->get();
如果有一点帮助就好了。
谢谢
您的代码的问题在于您嵌套了语句。你做 Laravel 的方式是生成一个 SQL 像这样:
select * from `clients` where not exists
(select * from `transactions`
where `clients`.`id` = `transactions`.`client_id`
and `name` = John)
但您要查找的实际 SQL 代码是:
select * from `clients` where not exists
(select * from `transactions`
where `clients`.`id` = `transactions`.`client_id`)
and `name` = John)
为此,您的代码应该是:
$results = Client::whereDoesntHave('transactions')
->where('firstname', '=', $inputFirst)
->orderBy('id', 'desc')
->get();
*我没有包括 transactions.period_id,因为我不确定您是否想要它。但是,如果它打算在第二个 select 内,则留在嵌套语句中,如果不在外面。
我正在努力 Eloquent 查询关系。
比如我只找没有交易的客户John
如何使用 Eloquent 执行此操作?
客户端模型关系
public function transactions()
{
return $this->hasMany(Transaction::class);
}
$results = Client::whereDoesntHave('transactions', function ($query) use ($inputFirst, $period) {
$query->where('transactions.period_id', '=', $period->id)
->where('firstname', '=', $inputFirst);
})
->orderBy('id', 'desc')
->get();
如果有一点帮助就好了。 谢谢
您的代码的问题在于您嵌套了语句。你做 Laravel 的方式是生成一个 SQL 像这样:
select * from `clients` where not exists
(select * from `transactions`
where `clients`.`id` = `transactions`.`client_id`
and `name` = John)
但您要查找的实际 SQL 代码是:
select * from `clients` where not exists
(select * from `transactions`
where `clients`.`id` = `transactions`.`client_id`)
and `name` = John)
为此,您的代码应该是:
$results = Client::whereDoesntHave('transactions')
->where('firstname', '=', $inputFirst)
->orderBy('id', 'desc')
->get();
*我没有包括 transactions.period_id,因为我不确定您是否想要它。但是,如果它打算在第二个 select 内,则留在嵌套语句中,如果不在外面。