Laravel 5.6与whereHas的多态关系

Had*_*i.M 10 php foreign-keys relational-database laravel-query-builder laravel-5.6

我正面临多形关系中的问题,我无法在哪里工作.基本上我有一个"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');
  }

 }
Run Code Online (Sandbox Code Playgroud)

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');
    }

}
Run Code Online (Sandbox Code Playgroud)

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

SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'cat_id'(SQL:选择count(*)作为orders存在的聚合(select*from ordersas laravel_reserved_0where laravel_reserved_0.id= laravel_reserved_0.part_stock_numbercat_id= 2和laravel_reserved_0.id= laravel_reserved_0.part_stock_numbercat_id= 2))

数据库表结构

在此输入图像描述

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

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

小智 8

有些问题使用whereHas我不知道为什么.但是,这种情况可以通过其他方式处理

您可能找不到编辑器中的哪个方法但可以使用它并且它可以相应地工作.使用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();
Run Code Online (Sandbox Code Playgroud)