【问题标题】:Get whereBetween on the lowest relationship table column获取最低关系表列的 whereBetween
【发布时间】:2018-07-29 16:50:34
【问题描述】:

我有一些特价产品。每个产品都有几个交易。我设法获得了 whereBetween,但仅限于所有相关交易。我只想退回最低交易与 whereBetween 匹配的产品。

因此,请获取最低关联交易价格介于给定最低和最高价格之间的产品。

到目前为止,这是我的代码:

$products = Product::when($request->filled('brand'), function ($query)use($request) {
    $brandRequest = $request->input('brand');
    $brandReqArray = explode(',', $brandRequest);
    $query->whereHas('brands', function($q) use ($brandReqArray)  {
        $q->whereIn('slug', $brandReqArray);
    });
})->when($request->filled('gender'), function ($query)use($request) {
    $genderRequest = $request->input('gender');
    $genderReqArray = explode(',', $genderRequest);
    $query->whereHas('genders', function($q) use ($genderReqArray)  {
        $q->whereIn('slug', $genderReqArray);
    });
})->when($request->filled('price'), function ($query)use($request) {
    $priceRequest = $request->input('price');
    $priceReqArray = explode(';', $priceRequest);
    $query->whereHas('deals', function($q) use ($priceReqArray)  {
        $q->whereBetween('price', $priceReqArray);
    }); 
})->with(['deals'  => function ($query) {
    $query->orderBy('price','asc');
}])->paginate(24);

$input = $request->only(['brands', 'gender', 'price']);
$products->appends($input);

【问题讨论】:

  • 你的问题不清楚队友,你想只获得价格范围内有交易的产品,如果它没有交易你想跳过特定产品,是吗?还是别的什么?
  • 对不起!我只想获得最低交易->价格在价格范围内的产品。所以每个产品都有几个交易,我想取每个产品的最低交易->价格并检查它是否在价格范围内,然后返回相应的产品。
  • 您想获得在价格范围内有交易的产品,但只有在该价格范围内的最低交易,而不是价格范围内的所有产品,是吗?
  • 正是这样!我已经尝试了很多,但仍然没有成功..

标签: php laravel request product


【解决方案1】:

试试这个,告诉我,这是你想要的吗?

    $products = Product::when($request->filled('brand'), function ($query)use($request) {
    $brandRequest = $request->input('brand');
    $brandReqArray = explode(',', $brandRequest);
    $query->whereHas('brands', function($q) use ($brandReqArray)  {
        $q->whereIn('slug', $brandReqArray);
    });
})->when($request->filled('gender'), function ($query)use($request) {
    $genderRequest = $request->input('gender');
    $genderReqArray = explode(',', $genderRequest);
    $query->whereHas('genders', function($q) use ($genderReqArray)  {
        $q->whereIn('slug', $genderReqArray);
    });
})->when($request->filled('price'), function ($query)use($request) {
    $priceRequest = $request->input('price');
    $priceReqArray = explode(';', $priceRequest);
    $query->whereHas('deals', function($q) use ($priceReqArray)  {
        $q->whereBetween('price', $priceReqArray)
        ->whereNotExists(function ($q)use($priceReqArray) {
            $q->select(DB::raw(1))
                ->from('deals')  
                //->whereNull('deals.deleted_at')                     
                ->whereNotBetween('price', $priceReqArray)
            ->whereRaw('product.id = deals.productId');
        }) 
        ->orderBy('price','asc')->limit(1);
    })
})->paginate(24);

【讨论】:

  • 不幸的是,已经尝试过了,但不起作用。仍然得到错误的产品。例如:我有一个产品有 3 个交易,最低交易价格是 30 欧元,最高交易价格是 60 欧元。在 40 到 60 欧元的范围内过滤时,我仍然得到这个产品。希望这有助于您了解它..
  • 我已经更新了我的答案,看看是否解决了你的问题
  • 对不起,伙计,还是买错了产品。现在唯一的问题是它只显示与价格范围相匹配的第一个产品的第一笔交易。所有其他产品均未显示价格,但仍可见。
  • 再一次让我感到困惑,您是否只想要在该范围内有交易的产品,并且您还想获得 1 个在该范围内价格最低的交易?
  • 检查我的更新,我添加了take 而不是limit,请尝试让我知道。此查询必须只返回在价格范围内有交易的产品,并且它只包括一个价格较低的交易
猜你喜欢
  • 2013-10-25
  • 1970-01-01
  • 2020-11-22
  • 2016-11-08
  • 2013-07-21
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
相关资源
最近更新 更多