在一个雄辩的查询中获取错误的ID

时间:2017-03-20 14:15:33

标签: laravel

我提出了一个查询,其中还有"Licencies"来自structure_id的{​​{1}}与4不同的结果。只有where子句,一切都很好,但如果我有一个orWhere的另一个条件,那么查询显示我也来自不同structure_ids ...任何人都知道正确的查询只有两个where子句获得良好的结构ID?非常感谢提前

这里是我的查询:

$licencies = Licencies::where('structure_id' ,  '4')->where('statut_licence_id' , '2')->orWhere('valid_licence_id' , '1')->get();

这是我运行代码时的查询:

select * from `licencies` where `structure_id` = '4' and `statut_licence_id` = '2' or `valid_licence_id` = '1'

但是在结果中我还获得了来自structure_id = 5的许可证,例如

3 个答案:

答案 0 :(得分:2)

如果您想获取具有structure_id 4的所有记录,但是使用statut_licence_id'2'或valid_licence_id 1,请尝试以下操作:

$licencies = Licencies::where('structure_id' , '4')
->where(function($query) {
     $query->where('statut_licence_id' , '2')
           ->orWhere('valid_licence_id' , '1')
 })->get();

在此处链接中查看参数分组:https://laravel.com/docs/master/queries#where-clauses

答案 1 :(得分:1)

您可以在查询生成器文档中找到有关使用多个where子句的更多信息:https://laravel.com/docs/5.4/queries#parameter-grouping

答案 2 :(得分:0)

试试这个:(顺便说一句,你有3个不同的ID ... structure_id,statut_licence_id,valid_licence_id)确保你的逻辑正确,因为你的查询似乎没问题。

$licencies = Licencies::where(['structure_id' => '4','statut_licence_id' => '2'])->orWhere('valid_licence_id' => '1')->get();

它的逻辑是从structure_id = 5获得许可,因为如果valid_licence_id为1(它将与你的OR语句匹配)那么structure_id为什么不是5?