我创建了一个搜索过滤器。基本上我是从单个表中获取记录,所以它工作正常。但是当我尝试从另一个表获取数据时,它不正确。这是我的drivers_table(driver_id是PK)
我正在使用此查询..
$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)..
我现在如何获取记录?
$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/