Laravel雄辩的复杂搜索查询问题

时间:2019-08-12 19:56:58

标签: laravel search eloquent relationship

一直在尝试使用不同的方法对多个和嵌套的多对多和hasany关系使用Eloquent进行搜索查询,但是很难找到解决方案。

在下面的模型部分中,我想使用 class Company extends Model { // the class properties, dates, etc... public function offices(){ return $this belongsToMany(Office::class); } } class Office extends Model { // the class properties, dates, etc... public function companies(){ return $this belongsToMany(Company::class); } public function addresses(){ return $this belongsToMany(Address::class); } } class Address extends Model { // the class properties, dates, etc... public function offices(){ return $this belongsToMany(Office::class); } public function services(){ return $this belongsToMany(Service::class); } public function countries(){ return $this belongsToMany(Country::class); } } class Service extends Model { // the class properties, dates, etc... public function addresses(){ return $this belongsToMany(Address::class); } } class Country extends Model { // the class properties, dates, etc... public function addresses(){ return $this belongsToMany(Address::class); } } 进行搜索。

模型

$request->name

根据主要模型(公司)搜索不同模型的目标。用伪代码将如下所示:

  • 公司中查找,其中名称$request->name
  • 或者在{strong>公司 网站(例如$request->name
  • 或者在办公室 办公室名称 $request->name
  • 或者地址 街道 $request->name
  • 或者在地址 country.name $request->name
  • 或者其中服务 addresses.service.name public function search(Request $request) { $data = Company::Active()->with('offices', 'addresses', 'offices.addresses') ->where('company_name', 'LIKE', '%' . $request->name . '%') ->orWhere('company_short_description', 'LIKE', '%' . $request->name . '%') ->orWhere('company_long_description', 'LIKE', '%' . $request->name . '%') ->orWhere('company_website', 'LIKE', '%' . $request->name . '%') ->whereHas('offices', function ($query) use ($request) { $query->where('name', 'LIKE', '%' . $request->name . '%'); }) ->whereHas('offices.addresses', function ($query) use($request){ $query->where('name', 'LIKE', '%' . $request->name . '%') ->orWhere('address_city', 'LIKE', '%' . $request->name . '%'); }) ->orderBy('company_name') ->paginate(20); return response()->json($data, 200); } Thank you in advance for any help or tips on the better solution to perform this broad (complex) search query with Eloquent.

公司有很多办公室 办公室有许多地址 地址有一个国家,并且 地址具有许多服务

在所有这些模型中,并且为了简化(我可能可以为每个模型外推和处理其他字段,我将使用 name 列。例如公司名称办公室名称地址名称服务名称 国家名称

我现在所拥有的是以下未按需要执行搜索的内容:

renderContent

1 个答案:

答案 0 :(得分:0)

我想我可以管理查询。不知道最好的方法还是可能需要一些优化,但是我至少可以从下面的查询中获得最近似的结果集。欢迎提出改进建议:)

value_a