Laravel 在相关表中多次搜索

Posted

技术标签:

【中文标题】Laravel 在相关表中多次搜索【英文标题】:Laravel multiple search in related tables 【发布时间】:2017-06-03 21:50:22 【问题描述】:

我有两张与城镇相关的表格。 (城镇属于城市,城市有很多城镇)

城镇表: id, name, city_id

城市表: 身份证、姓名

对于自动完成的 ajax 查询,我可以像这样通过 sql 查询得到结果。

Select t.id AS townid, t.name AS townname, c.name AS cityname FROM towns t 
left join cities c ON t.city_id=c.id
where t.name like '%ana%' OR c.name like '%ana%';

所以我得到了我想要的结果。但是在laravel中我无法做到这一点。 我可以搜索城镇但不搜索城市名称。

    $towns = App\Town::with('city')->where('name', 'like', '%ana%')->get();

【问题讨论】:

【参考方案1】:

试试下面的代码

$towns= DB::table('towns')
     ->join('cities', 'cities.id', '=', 'towns.city_id')
     ->select('towns.id as townid', 'towns.name as towname', 'cities.name as cityname')
     ->where('towname', 'like', '%ana%')
     ->orWhere('cityname', 'like', '%ana%') 
     ->get();

【讨论】:

【参考方案2】:

Laravel Elequent with() 不会加入,所以你无法在城镇中搜索。

要进行与 abouse 相同的查询,您必须使用正确的 laravel 连接。

比如:

$towns = App\Town::leftJoin('cities', 'towns.city_id', '=', 'cities.id')
->where('towns.name', 'like', '%ana%')->orWhere('cities.name', 'like', '%ana%')->get();

但在这个例子中,请检查选择了什么。您还可以指定要选择的字段 (select('towns.id', 'towns.name', ...))。

【讨论】:

以上是关于Laravel 在相关表中多次搜索的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 在带有分页的数据透视表中搜索

如何使用 Laravel 在 LIKE 搜索中使用 ORM 从两个表中获取数据

Laravel:从相关表中获取数据(json数组列)

Laravel 5.4 从相关表中删除表行和行

Laravel:搜索相关数据

如何使用 Laravel 5 从相关表中查询具有条件的表