简体   繁体   English

Laravel-子句不起作用的地方

[英]Laravel - Where Clause not working

I am trying to build a search form with laravel, but I cannot get the where clause to work. 我正在尝试使用laravel构建搜索表单,但无法使where子句起作用。

$term = $request->input('term');

$count = DB::table('members as m')
         ->where(DB::raw('m.member_first_name'), 'LIKE', "%$term%")
         ->orWhere(DB::raw('m.member_last_name'), 'LIKE', "%$term%")
         ->orWhere(DB::raw('m.member_business_address'), 'LIKE', "%$term%")
         ->orWhere(DB::raw("concat('m.member_first_name',' ','m.member_last_name')"), 'LIKE', "%$term%")
         ->orWhere(DB::raw("concat('m.member_last_name',' ','m.member_first_name')"), 'LIKE', "%$term%")
         ->orWhere(DB::raw("concat('m.member_name_affix',' ','m.member_last_name',' ','m.member_first_name')"), 'LIKE', "%$term%")
         ->orWhere(DB::raw("concat('m.member_first_name',' ','m.member_name_affix',' ','m.member_last_name')"), 'LIKE', "%$term%")
         ->count();

var_dump($count);



var_dump($count) always returns all the database entries , no matter what the search term is. var_dump($ count)始终返回所有数据库条目 ,无论搜索词是什么。


This is my first Laravel project and I would be very thankful for any kind of help. 这是我的第一个Laravel项目,非常感谢我提供的任何帮助。

Perhaps try encasing the query in an overall where: 也许尝试将查询整体包裹在以下位置:

$count = DB::table('members as m')
         ->where(function ($q) {
            $q->where(DB::raw('m.member_first_name'), 'LIKE', "%$term%")
            ->orWhere(DB::raw('m.member_last_name'), 'LIKE', "%$term%")
            ->orWhere(DB::raw('m.member_business_address'), 'LIKE', "%$term%")
            ->orWhere(DB::raw("concat('m.member_first_name',' ','m.member_last_name')"), 'LIKE', "%$term%")
            ->orWhere(DB::raw("concat('m.member_last_name',' ','m.member_first_name')"), 'LIKE', "%$term%")
            ->orWhere(DB::raw("concat('m.member_name_affix',' ','m.member_last_name',' ','m.member_first_name')"), 'LIKE', "%$term%")
            ->orWhere(DB::raw("concat('m.member_first_name',' ','m.member_name_affix',' ','m.member_last_name')"), 'LIKE', "%$term%")
         })
         ->count();

You're using and / or together, which of course will fail. 您正在和和 / 一起使用,这当然会失败。 Try the following: 请尝试以下操作:

$count = DB::table('members as m')
     ->where(DB::raw('m.member_first_name'), 'LIKE', "%$term%")
     ->where(function ($query) {
            $query->where(DB::raw('m.member_last_name'), 'LIKE', "%$term%")
                ->orWhere(DB::raw('m.member_business_address'), 'LIKE', "%$term%"));
        })

Simply try this code and if you got some syntax error then try to change the ' symbols here and there..as I can't test it before post.. 只需尝试这段代码,如果遇到语法错误,请尝试在此处和此处更改'符号。因为发布前我无法对其进行测试。

$term = "%".$request->input('term')."%";
$count = DB::table('members as m')
         ->where('m.member_first_name', 'LIKE', $term)
         ->orWhere('m.member_last_name', 'LIKE', $term)
         ->orWhere('m.member_business_address', 'LIKE', $term)
         ->orWhereRaw('(concat_ws(m.member_first_name,m.member_last_name) LIKE ? )',[$term])
         ->orWhereRaw('(concat_ws(m.member_last_name,m.member_first_name) LIKE ? )',[$term])
         ->orWhereRaw('(concat_ws(m.member_name_affix,m.member_last_name,m.member_first_name) LIKE ? )',[$term])
         ->orWhereRaw('(concat_ws(m.member_first_name,m.member_name_affix,m.member_last_name) LIKE ? )',[$term])
         ->count();

var_dump($count);

you can use whereRaw() don't need to put DB::raw() inside where() . 您可以使用whereRaw() ,而无需将DB::raw()放入where()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM