首页 > 解决方案 > Laravel 5.6 与 whereHas 的多态关系

问题描述

我在多态关系中面临一个问题,我无法让 whereHas 工作。基本上我有一个我想申请的“where”条件。关系代码可以正常返回相关模型,但是一旦应用 whereHas 就会返回错误。

下面是代码

订单类:

class Order extends Model
 {

  // function to return orders 
  public static function getAllOrders()
  { 


    return $orders = Order::with('part.pcategory')->whereHas('part', function ($query) 
         {
                  $query->where('cat_id',4);
         })->get();
  }

  // the relation 
  public function part()
  { 

  return $this->morphTo(null,'department_short_code','part_stock_number','stock_number', 'dep_short_code');
  }

 }

SFD 零件类别:

class sfd_part extends Model
{

  public function orders()
    {   

    return  $this->morphMany('App\Order','part','department_short_code','part_stock_number');
   }

   public function pcategory()
    {

    return $this->belongsTo('App\Pcategories','cat_id', 'category_id');
    }

}

当我调用 getAllOrders() 它给出以下错误

SQLSTATE [42S22]:未找到列:1054 'where 子句'中的未知列 'cat_id'(SQL:select count(*) as aggregate from orderswhere exists (select * from ordersas laravel_reserved_0where laravel_reserved_0. id= laravel_reserved_0. part_stock_numberand cat_id= 2 and laravel_reserved_0. id= laravel_reserved_0. part_stock_numberand cat_id= 2))

数据库表结构

在此处输入图像描述

我试图获取的数据是与每个部分相关的订单列表。然后我得到与这部分相关的类别名称。此外,我想通过使用 whereHas 过滤此列表,例如,所有订单来自特定类别。

订单表有与部分链接的订单。这部分可以在 3 个表中的任何一个中,这就是为什么我在两个键 department_short_code 和 part_stock_number 上使用多态关系中继

标签: phpforeign-keysrelational-databaselaravel-5.6laravel-query-builder

解决方案


使用 whereHas 存在一些问题,我不知道为什么。这种情况可以通过其他方式处理

您可能在编辑器中找不到 where 方法,但可以使用它并相应地工作。使用 tosql() 进一步检查查询。

Order::with('part.pcategory')->where( function ($query) {
        $query->whereIn('part_id', function ($query) {
            $query->select('id')
                ->from('sfd_part')
                ->where('cat_id',4);
        });
    })->get();

推荐阅读