Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 对嵌套式WHERE的关系进行查询_Laravel_Eloquent_Laravel 6 - Fatal编程技术网

Laravel 对嵌套式WHERE的关系进行查询

Laravel 对嵌套式WHERE的关系进行查询,laravel,eloquent,laravel-6,Laravel,Eloquent,Laravel 6,我一直在为对关系的质疑而苦苦挣扎 例如,我只寻找没有交易的客户John 我怎样才能做到这一点与雄辩 客户模型关系 公共功能事务() { 返回$this->hasMany(事务::类); } $results=Client::whereDoesntHave('transactions',函数($query)使用($inputFirst,$period){ $query->where('transactions.period\u id','=',$period->id) ->其中('firstna

我一直在为对关系的质疑而苦苦挣扎

例如,我只寻找没有交易的客户John

我怎样才能做到这一点与雄辩

客户模型关系

公共功能事务()
{
返回$this->hasMany(事务::类);
}
$results=Client::whereDoesntHave('transactions',函数($query)使用($inputFirst,$period){
$query->where('transactions.period\u id','=',$period->id)
->其中('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();

*我没有包括交易。句号,因为我不知道你在哪里找。但是,如果要在第二个select中,则保留在嵌套语句中,如果不保留在外部,则保留在嵌套语句中。

代码的问题在于您正在嵌套语句。您执行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();

*我没有包括交易。句号,因为我不知道你在哪里找。但是,如果要在第二个select中,请保留在嵌套语句中,如果不保留在外。

您的查询看起来正确,那么您的问题是什么?如果我正确理解了您的问题,您希望客户与名为John的客户没有交易?然后需要使用运算符而不是=。所以你的where应该是where('firstname',,$inputFirst);抱歉,如果你不是在问这个问题……你的问题仍然让人困惑。请你详细说明并添加模型定义客户模型关系
公共函数事务(){return$this->hasMany(Transaction::class);}
抱歉造成困惑。我只找没有交易的客户约翰。现在,雄辩地告诉我所有的交易,比如@adolfotcar说将where子句改为“”,而不是“=”,你的查询看起来是正确的,那么你的问题是什么?如果我正确理解了你的问题,你想要的客户与名为John的客户没有交易?然后需要使用运算符而不是=。所以你的where应该是where('firstname',,$inputFirst);抱歉,如果你不是在问这个问题……你的问题仍然让人困惑。请你详细说明并添加模型定义客户模型关系
公共函数事务(){return$this->hasMany(Transaction::class);}
抱歉造成困惑。我只找没有交易的客户约翰。现在,雄辩地告诉我所有的交易,比如@adolfotcar说将where子句改为“”,而不是“=”