Php 拉维搜索;按外部表筛选,然后再次使用本地表筛选结果

Php 拉维搜索;按外部表筛选,然后再次使用本地表筛选结果,php,mysql,laravel,Php,Mysql,Laravel,我有两张桌子“库存”和“产品”。他们有一对多的关系 模型- Product.php public function stocks(){ return $this->hasMany('Modules\Stock\Entities\Stock'); } Model-Stock.php public function product(){ return $this->belongsTo('Modules\Product\Entities\Product')->wit

我有两张桌子“库存”和“产品”。他们有一对多的关系

模型- Product.php

public function stocks(){
    return $this->hasMany('Modules\Stock\Entities\Stock');
}
Model-Stock.php

public function product(){
    return $this->belongsTo('Modules\Product\Entities\Product')->withTrashed();
}
在搜索股票时,我也想按产品名称搜索。我有一个搜索关键字和一个可选的低库存复选框创建搜索。所以,如果我想寻找一种低库存的产品,比如说“鞋子”,它应该告诉我数量少的鞋子

只要搜索类型在stock表的列中,这种方法就可以很好地工作。但当我想根据产品名称(在产品表中)搜索记录时,然后根据低库存(在库存表中)过滤这些结果记录。没有显示任何结果

class ProductName implements Filter
{
   public static function apply(Builder $builder, $value, $checkbox)
   {
      if($checkbox == null) {
         $a = $builder->whereHas ('product', function ($query) use ($value) 
         {
            $query->where('name', 'LIKE', '%' . $value . '%'); //this works fine.
         });
      } else {
        $a = $builder->whereHas ('product', function ($query) use ($value) {
            $query->where('name', 'LIKE', '%' . $value . '%');
        })->whereRaw('quantity < low_stock_threshold'); //This is meant for two search filters;one for searching in product table then filtering the results againtst stock table according to low quantity.
      }
      return $a;
   }
}
class ProductName实现过滤器
{
公共静态函数应用(生成器$Builder,$value,$checkbox)
{
如果($checkbox==null){
$a=$builder->whereHas('product',函数($query)use($value)
{
$query->where('name'、'LIKE'、'%'。$value'%');//这很好用。
});
}否则{
$a=$builder->whereHas('product',函数($query)use($value){
$query->where('name','LIKE','%%.$value'%');
})->whereRaw('quantity

注释行是无效的。如果有人能解决这个问题,请提供帮助。

我看到了我的sql查询,并根据需要进行了编辑,它运行正常。谢谢@Egretos的建议

class ProductName implements Filter
{
   public static function apply(Builder $builder, $value, $checkbox)
   {
       if($checkbox == null) {
           $a = $builder->whereHas ('product', function ($query) use ($value) {
               $query->where('name', 'LIKE', '%' . $value . '%');
           });
       } else {
           $a = $builder->whereHas ('product', function ($query) use ($value) {
               $query->where('name', 'LIKE', '%' . $value . '%');
           })->whereRaw('`stocks`.`quantity` < `stocks`.`low_stock_threshold`'); //edited this line and it worked.

       }
       return $a;
   }

}
class ProductName实现过滤器
{
公共静态函数应用(生成器$Builder,$value,$checkbox)
{
如果($checkbox==null){
$a=$builder->whereHas('product',函数($query)use($value){
$query->where('name','LIKE','%%.$value'%');
});
}否则{
$a=$builder->whereHas('product',函数($query)use($value){
$query->where('name','LIKE','%%.$value'%');
})->whereRaw('stocks`.'quantity`.'stocks`.'low_stock_threshold`);//编辑了这一行,它成功了。
}
返回$a;
}
}

能否显示SQL查询<代码>echo$a->toSql();死亡
库存
中选择*(从
产品
库存
中选择*。
产品id
=
产品
id和
名称
类似?),数量库存在处删除的
为空