伙计们,我需要你的帮助。我有这个查询:
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())来进行分页?
答案 0 :(得分:3)
您可以在Eloquent Builder上使用whereRaw
和orWhereRaw
方法来使用原始表达式,同时保持获得模型实例的能力。
优点是您仍然可以使用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();