首页 > 解决方案 > 带有自定义条件的 Laravel Eloquent 查询

问题描述

我有一张complaints表,其中存储了用户注册的所有投诉,这些投诉被分配给一些用户来解决它们。

我没有任何关系表来映射将哪个投诉分配给哪个用户,实际上我有一个表employees_records来存储分配了一些投诉的所有用户的信息。(由于这些代码在实时服务器上,我们暂时无法更改数据库结构)

现在我们得到哪个投诉分配给哪个用户是通过

$v=Complaints::find($id);
$dUser = EmployeesRecord::whereJsonContains('categories', "$v->category_id")
                ->whereJsonContains('sub_categories', "$v->code_id")
                ->whereJsonContains('zones', "$v->zone_id")
                ->whereJsonContains('wards', "$v->ward_id")
                ->whereJsonContains('cities', "$v->city_id");
                ->where('department_id',$v->department_id)->first();

如果$dUser为空,则表示未将投诉分配给任何用户,如果我们得到一个用户,则表示将投诉分配给该用户。

在投诉登记的时候,我们得到categories,sub_categories, zone, wards, city,department_id数据。检查是否有任何用户在该 ID 下。

最后的问题:

我想获得所有未分配给任何用户的投诉。但是知道投诉是否分配给用户的过程(正如我上面提到的)对我来说很复杂。而且我无法在查询中映射这个东西。我想要一个高性能的查询,因为我在报告生成中使用它。

我尝试了什么。

我试图先得到所有的投诉

    $complaints=Complaints::all();
$assigned_complaints=[];
$un_assigned_complaints=[];
foreach($complaints as $k => $v)
{
    $dUser = EmployeesRecord::whereJsonContains('categories', "$v->category_id")
                ->whereJsonContains('sub_categories', "$v->code_id")
                ->whereJsonContains('zones', "$v->zone_id")
                ->whereJsonContains('wards', "$v->ward_id")
                ->whereJsonContains('cities', "$v->city_id");
                ->where('department_id',$v->department_id)->first();
    if($dUser)
    {
        $assigned_complaints[]=$k;
    }
    else
    {
        $un_assigned_complaints[]=$k;
    }
}
$total_assigned_complaints=count($assigned_complaints);
$total_un_assigned_complaints=count($un_assigned_complaints);

但我想要一个解决方案,它适用于Complaint模型查询,而不是循环投诉数据。由于数据量非常大。

标签: phplaravel

解决方案


推荐阅读