php - 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
orders
where exists (select * fromorders
aslaravel_reserved_0
wherelaravel_reserved_0
.id
=laravel_reserved_0
.part_stock_number
andcat_id
= 2 andlaravel_reserved_0
.id
=laravel_reserved_0
.part_stock_number
andcat_id
= 2))
数据库表结构
我试图获取的数据是与每个部分相关的订单列表。然后我得到与这部分相关的类别名称。此外,我想通过使用 whereHas 过滤此列表,例如,所有订单来自特定类别。
订单表有与部分链接的订单。这部分可以在 3 个表中的任何一个中,这就是为什么我在两个键 department_short_code 和 part_stock_number 上使用多态关系中继
解决方案
使用 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();
推荐阅读
- python - Pandas 与 MLLib 的协方差计算的确切 Apache-Spark NA 处理差异是什么?
- google-apps-script - 从 Google Apps 脚本访问 GoogleSheet 链接的 BigQuery 表时出现“获取驱动器凭据时权限被拒绝”错误
- java - 从另一个类访问变量的最佳方法?
- python - Python:如何通过保持值的总和不变来对数据框进行分组?
- reactjs - 如何使 MUI AppBar 中的搜索组件居中?
- apache-camel - 如何多次向同一组路由发送消息并在不同线程上以异步方式同时执行它?
- qt - 属性的动画问题
- ssl - Letencrypt 设置到 GCP CDN
- wordpress - .htaccess:如何将 WordPress 页面/部分重写为子域?
- c# - Xunit 测试测试资源管理器未运行测试