首页 > 解决方案 > laravel 根据属性过滤结果

问题描述

我有一个名为“motors”的主表,它们的属性我保存在子表“motor_attributes”中。属性是动态的,它们可以保存任何 id 和 value。关系是一对多的关系。问题是我无法搜索任何属性。它给了我相同的父表项“条目”。

我想让它更清楚。每次它给我6个enteries。即使我更改了 $request->get('body_condition') 的值。手动。因为它的查询字符串。我想根据这些属性最好地过滤电机。任何帮助将不胜感激。它只是隐藏了不是主要广告的属性。任何帮助将不胜感激。提前致谢

```````````

        $perPage = 20;
        $motorQuery = Motor::with(['advertisementPhotos', 'country', 'city', 'customer.dealer','favouriteAd', 'adAttributes' => function ($query) use ($request){

             // dd($request->get('body_condition'));
             $query->where('integer_value',$request->get('body_condition'));
             $query->with('attribute');
             $query->with('adAttributeValue');
             $query->where('show_listing_page',1);
        //;
        //  return $query->take(2);

          }])
        ->where('status', 1)
        ->where('date_expiry', '>=', date('Y-m-d') . ' 00:00:00');


    if (request()->filled('city')) {
        $motorQuery->where('city', request()->get('city'));
    }
    if (request()->filled('keywords')) {
        $motorQuery->where('title', 'like', '%' . request()->get('keywords') . '%');
    }
    if (request()->filled('from_price')) {
        $motorQuery->where('price', '>=', request()->get('from_price') );
    }
    if (request()->filled('to_price')) {
        $motorQuery->where('price', '<=', request()->get('to_price') );
    }


    if (request()->hasCookie('country')) {
        $motorQuery->where('country', request()->cookie('country')->first()->id);
    }

    $data['allMotors'] =  $allMotors = $motorQuery->orderBy('featured', 'desc')->orderBy('date_posted', 'desc')->paginate($perPage);

```

标签: mysqllaraveleloquentvuejs2laravel-query-builder

解决方案


您必须尝试使用​​ join 进行属性过滤。此外,如果任何与属性相关的表并且您希望这些表中的一些数据也加入这些表中。尝试这样的事情:

$motorQuery = Motor::with(['advertisementPhotos', 'country', 'city', 'customer.dealer','favouriteAd'])
            ->join('ad_attribute_value', 'ad_attribute_value.motor_id', '=', 'motor.id')
            ->where(function($query) use ($request){
                       if($request->get('body_condition') != '')
                           $query->where('integer_value', '=', $request->get('body_condition'))
            })
            ->where('status', 1)
            ->where('date_expiry', '>=', date('Y-m-d') . ' 00:00:00');

看看它是否适合你。


推荐阅读