【问题标题】:在 Laravel 8 中搜索数据库
【发布时间】:2022-01-20 03:25:49
【问题描述】:

我是 Laravel 的初学者。 我在 Laravel 中做了我的第一个项目。 我在我的项目中使用 Laravel 8。

我有这个代码:

$query = Immovable::query()
            ->leftJoin('streets', 'streets.gus_id', '=', 'immovables.street_gus_id')
            ->select('immovables.id',
                'immovables.street_gus_id',
                'immovables.building_number',
                'immovables.apartment_number',
                'streets.name as street_name'
            );
if (request()->has('search')) {
                        $query->where('streets.name', 'like', "%" . $request->search['value'] . "%");
                        $query->orWhere('immovables.community', 'like', "%" . $request->search['value'] . "%");
                        $query->orWhere('immovables.city', 'like', "%" . $request->search['value'] . "%");
                        $query->orWhere('immovables.building_number', 'like', "%" . $request->search['value'] . "%");
                        $query->orWhere('immovables.granted_comments', 'like', "%" . $request->search['value'] . "%");
                        $query->orWhere('immovables.inspections', 'like', "%" . $request->search['value'] . "%");
                        $query->orWhere('immovables.oze_installations', 'like', "%" . $request->search['value'] . "%");
                        $query->orWhere('immovables.pesel', 'like', "%" . $request->search['value'] . "%");
                        $query->orWhere('immovables.name', 'like', "%" . $request->search['value'] . "%");
                        $query->orWhere('immovables.surname', 'like', "%" . $request->search['value'] . "%");
                        $query->orWhere('immovables.email1', 'like', "%" . $request->search['value'] . "%");
                        $query->orWhere('immovables.email2', 'like', "%" . $request->search['value'] . "%");
                        $query->orWhere('immovables.email3', 'like', "%" . $request->search['value'] . "%");
                        $query->orWhere('immovables.phone1', 'like', "%" . $request->search['value'] . "%");
                        $query->orWhere('immovables.phone2', 'like', "%" . $request->search['value'] . "%");
                        $query->orWhere('immovables.phone3', 'like', "%" . $request->search['value'] . "%");
                        $query->orWhere('immovables.description', 'like', "%" . $request->search['value'] . "%");
                    }
$query->get();

一切正常。

当我尝试一次在姓名和姓氏中查找用户时遇到问题。例如,当我写:卡罗尔 - 我有结果。当我写 Krawczyk - 我有结果。当我写下:Karol Krawczyk - 我没有结果

我该如何修复它?

【问题讨论】:

  • 当您使用 Karol Krawczyk 时,它会在不可用的名称字段中搜索它,因此它返回空行。
  • 是的。我该如何修复它?

标签: php laravel eloquent


【解决方案1】:

一种方法是用分隔符分隔搜索值(在这种情况下,空格可能是合适的),然后循环查找 orWhere 部分

$query = Immovable::query()
    ->leftJoin('streets', 'streets.gus_id', '=', 'immovables.street_gus_id')
    ->select('immovables.id',
        'immovables.street_gus_id',
        'immovables.building_number',
        'immovables.apartment_number',
        'streets.name as street_name'
    );
if (request()->has('search')) {
    $searches = explode(" ", $request->search['value']);
    foreach ($searches as $index => $search) {
        if ($index === 0) {
            $query->where('streets.name', 'like', "%" . $search . "%");
        } else {
            $query->orWhere('streets.name', 'like', "%" . $search . "%");
        }
        $query->orWhere('immovables.community', 'like', "%" . $search . "%");
        $query->orWhere('immovables.city', 'like', "%" . $search . "%");
        $query->orWhere('immovables.building_number', 'like', "%" . $search . "%");
        $query->orWhere('immovables.granted_comments', 'like', "%" . $search . "%");
        $query->orWhere('immovables.inspections', 'like', "%" . $search . "%");
        $query->orWhere('immovables.oze_installations', 'like', "%" . $search . "%");
        $query->orWhere('immovables.pesel', 'like', "%" . $search . "%");
        $query->orWhere('immovables.name', 'like', "%" . $search . "%");
        $query->orWhere('immovables.surname', 'like', "%" . $search . "%");
        $query->orWhere('immovables.email1', 'like', "%" . $search . "%");
        $query->orWhere('immovables.email2', 'like', "%" . $search . "%");
        $query->orWhere('immovables.email3', 'like', "%" . $search . "%");
        $query->orWhere('immovables.phone1', 'like', "%" . $search . "%");
        $query->orWhere('immovables.phone2', 'like', "%" . $search . "%");
        $query->orWhere('immovables.phone3', 'like', "%" . $search . "%");
        $query->orWhere('immovables.description', 'like', "%" . $search . "%");
    }
}
$query->get();

让我知道这是否适合您。谢谢!

【讨论】:

    猜你喜欢
    • 2021-10-22
    • 2021-07-06
    • 2017-11-05
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    相关资源
    最近更新 更多