php - 在 Laravel 5.4.36 中使用模型搜索数据

标签 php mysql laravel laravel-5 laravel-5.4

我创建了一个搜索过滤器。基本上我是从单个表中获取记录,所以它工作正常。但是当我尝试从另一个表获取数据时,它不正确。这是我的drivers_table(driver_id是PK)

Drivers Table

我正在使用此查询..

$drivers = Drivers::where('city', 'like', "$keywords[0]%")
            ->Where('first_name', 'like', "$keywords[1]%")
            ->get();

我有两个下拉列表,假设我有 50 个司机,当我从第一个下拉列表中选择城市 "DOHA" 时,使用 ajax 它会从 50 个司机中获取 20 个司机的记录,然后我选择first_name "ASFAND" 从第二个下拉列表中,它为我提供了 20 个司机列表中名字为 Asfand 的人的记录。有 5 个人的名字叫 Asfand,他们也来自多哈市(因为我从第一个下拉列表中选择了 DOHA 作为城市,并从第二个下拉列表中选择了 first_name 作为 Asfand。

一切都很完美。但现在我的问题是我有一个第三个下拉列表,我可以从中选择银行名称,但银行名称不在驱动程序表中,还有另一个表。

银行(id、driver_id、bank_name)..

Banks Table

我现在如何获取记录?

$drivers = DB::table('drivers')
            ->join('bank','bank.driver_id','=','drivers.driver_id')
            ->where('city', 'like', "$keywords[0]%")
            ->Where('first_name', 'like', "$keywords[1]%")
            ->orWhere('bank.bank_name', 'like', "$keywords[3]%")
            ->get();

现在,如果我从第一个下拉列表中选择多哈,它不会显示任何记录。如果我从第三个下拉列表中选择银行名称,那么它会显示记录。我希望下拉列表是独立的。

如果我没有从第三个下拉列表中选择任何内容,它仍然应该显示我从前两个下拉列表中选择的内容。

最佳答案

只有在需要时才可以使用联接。

 $drivers = DB::table('drivers')
        ->where('city', 'like', "$keywords[0]%")
        ->where('first_name', 'like', "$keywords[1]%")
        ->when(!empty($keywords[3]), function ($query) use ($keywords) {
            $query->join('bank','bank.driver_id','=','drivers.driver_id')
            $query->where('bank.bank_name', 'like', $keywords[3].'%');
        })

关于php - 在 Laravel 5.4.36 中使用模型搜索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46951203/

相关文章:

php - CodeIgniter 查询数据库

php - 使用 php 客户端使用 Web 服务(Soap)

php - GMail SMTP 测试邮件发送失败

mysql - 外循环没有在此程序中执行,请建议我该怎么办?

laravel 5.5 缓存错误 "Serialization of ' 不允许关闭”

php - 使用 CodeIgniter 查询数据库以获取过去一周内提交的条目?

mysql - 以一种棘手的方式连接 MySQL 表

mysql - MySQL 中的聚簇索引

Laravel 验证 : require any of two field if another field is available

php - 如何在 Laravel 中建立 belongsTo() 关系?