将原始SQL查询转换为Eloquent

时间:2020-02-06 14:31:08

标签: laravel eloquent

伙计们,我需要你的帮助。我有这个查询:

SELECT * FROM users
where lcase(concat(firstname, ' ', lastname)) like lcase(concat('%', replace('%searchterm%', ' ', '%'), '%'))
OR lcase(concat(lastname, ' ', firstname)) like lcase(concat('%', replace('%searchterm%', ' ', '%'), '%'))
OR lcase(location) like lcase('%searchterm%')

是否可以使用口才不错的查询代替DB :: select(DB :: raw())来进行分页?

2 个答案:

答案 0 :(得分:3)

您可以在Eloquent Builder上使用whereRaworWhereRaw方法来使用原始表达式,同时保持获得模型实例的能力。

优点是您仍然可以使用PDO参数绑定,因此可以通过$searchTerm避免SQL注入。

您还可以在documentation中找到有关原始表达式的更多信息;

// Assuming $searchTerm contains the term that you need to search the database for

$users = User::whereRaw('lcase(concat(firstname, " ", lastname)) like lcase(concat("%", replace("%?%", " ", "%"), "%"))', [ $searchTerm ])
    ->orWhereRaw('lcase(concat(lastname, " ", firstname)) like lcase(concat("%", replace("%?%", " ", "%"), "%"))', [ $searchTerm ])
    ->orWhereRaw('lcase(location) like lcase("%?%")', [ $searchTerm ])
    ->get();

答案 1 :(得分:1)

要拆分where条件,可以使用orWhere方法。

User::
  ->where(DB::raw('condition_one'))
  ->orWhere(DB::raw('condition_two'))
  ->orWhere(DB::raw('condition_three'))
  ->paginate();
相关问题