使用Laravel Eloquent / MySQL比较多个数据库行值

时间:2017-11-18 03:50:19

标签: php mysql sql laravel eloquent

我使用Laravel作为我的项目并拥有如下的MySQL表:

| User_id | technology | years_experience |
| 1       | PHP        |  4               |
| 2       | AngularJS  |  2               |
| 1       | HTML       |  2               |

目前我正在使用标准,其中查询只支持一个标准

Table::where([
['technology', '=', 'PHP'],
['years_experience', '>', 2]
])->get()->pluck('user_id');

如果我想使用PHP>检索所有User_id,我如何按User_id过滤和分组结果? 2 AND HTML> 1?

3 个答案:

答案 0 :(得分:0)

没有测试过这个,但理想情况下我猜这就是你需要的

Table::where('technology', '=', 'PHP')->andWhere('years_experience', '>', 2)->get()->pluck('user_id')->andWhere('user_id','=',ANYUSERID)->groupBy('user_id')->get(['user_id','technology','years_experience']);

答案 1 :(得分:0)

问题是 (condition1 AND condition2)AND(condition3 AND condition4)

这是你可以做到的:

Table::where(function($query){
    $query->where('technology', '=', 'PHP')->where('years_experience', '>', 2);
})->where(function($query) {
    $query->where('technology', '=', 'HTML')->where('years_experience', '=', 1);
})->get()->pluck('user_id');

答案 2 :(得分:0)

使用WHERE / AND的问题在于它不会比较行级别的值,而是跨列搜索匹配值

" hack"是使用HAVING()。这是工作解决方案:

Table::groupBy('user_id')
->havingRaw("sum(tech='PHP' AND experience>=2) > 0")
->havingRaw("sum(tech='HTML' AND experience>=1) > 0")
->get()
->pluck('user_id')