时间戳转换器

将原始查询转换为雄辩的 laravel

日期:2023-05-09     浏览:276    
【中文标题】将原始查询转换为雄辩的 laravel【英文标题】:Converting raw query to eloquent laravel 【发布时间】:2020-02-24 09:43:21 【问题描述】:

关系:

public function category()
    
        return $this->belongsTo(Category::class, 'category_id');
    

public function status() 
    
        return $this->belongsTo(Status::class, 'status_id');
    

查询:

return DB::table('asset_management_system.assets')
        ->join('asset_management_system.categories', 'asset_management_system.assets.category_id', '=', 'asset_management_system.categories.id')
        ->select('asset_management_system.categories.name', 'asset_management_system.categories.icon')
        ->selectRaw('count(asset_management_system.assets.category_id) as count,
        sum(case when status_id = 1 then 1 else 0 end) AS assigned,
        sum(case when status_id = 2 then 1 else 0 end) AS "stored",
        sum(case when status_id = 3 then 1 else 0 end) AS missing,
        sum(case when status_id = 4 then 1 else 0 end) AS broken')
        ->groupBy('asset_management_system.assets.category_id')
        ->get();

此查询当前返回每个类别的已分配、存储、丢失和损坏资产的计数。我怎样才能把它转换成雄辩的?

【问题讨论】:

你不能。如果你想要一个 Eloquent 对象,那么你必须使用 Eloquent 来实现这一点。如果您有任何 id 或唯一值,您可以基于此获取 Eloquent 对象。 【参考方案1】:

您的查询完全没问题。我相信这是最有效的方法。

或者,您可以使用withCount 函数。

我假设您已经获得了 Category 模型:

class Category extends Model

    public function assets()
    
        return $this->hasMany(Asset::class);
    

$categories = Category::withCount([
    'assets',
    'assets as assigned_count' => function ($query) 
        $query->where('status_id', 1);
    ,
    'assets as stored_count' => function ($query) 
        $query->where('status_id', 2);
    ,
    'assets as missing_count' => function ($query) 
        $query->where('status_id', 3);
    ,
    'assets as broken_count' => function ($query) 
        $query->where('status_id', 4);
    ,
])
->get();

然后:

$categories->each(function ($category) 
    dump($category->assets_count);
    dump($category->assigned_count);
    dump($category->stored_count);
    dump($category->missing_count);
    dump($category->broken_count);
);

【讨论】:

谢谢!这正是我所需要的。

相关文章

将mysql查询转换为雄辩的查询问题

{】将mysql查询转换为雄辩的查询问题【英文标题】:convertmysqlquerytoeloquentqueryissue【发布时间】:2018-09-3018:13:24【问题描述】:我在mysql中构建了以下查询。并尝试了很多转换为laravel但没有成功。SELECTu.id,u.purchase_item_name,u.sales_item_...}

雄辩的查询转换为浮动

{】雄辩的查询转换为浮动【英文标题】:EloquentQueryCasttoFloat【发布时间】:2018-05-1718:08:48【问题描述】:我有一个雄辩的查询,我想将一个字段转换为“浮点数”。它是一个聚合值,它现在作为一个字符串返回,这里是一个查询...}

将 postgres 原始查询转换为 Django ORM 查询并分组

{】将postgres原始查询转换为DjangoORM查询并分组【英文标题】:ConvertpostgresrawquerytoDjangoORMqueryandgroupby【发布时间】:2020-07-1315:20:00【问题描述】:我有一个原始Postgresql查询需要转换为DjangoORM查询。我能够在Postgres中执行查询并看到...}

需要将查询转换为 Eloquent Model laravel

{】需要将查询转换为EloquentModellaravel【英文标题】:NeedtoconvertaqueryintoEloquentModellaravel【发布时间】:2021-07-2721:11:39【问题描述】:我有一个MySQL的查询,但我需要将它转换成一个雄辩的模型laravel8。查询如下,$query="SELECTgroup_idFROM...}

将此查询转换为 eloquent

{】将此查询转换为eloquent【英文标题】:Convertthisqueryforeloquent【发布时间】:2013-01-0815:13:28【问题描述】:我正在开发一个Laravel项目,并尝试将此查询转换为雄辩的查询,以便我可以急切地加载其他关系。$restaurants=DB::query(\'SELEC...}

Laravel:自我 JOIN 的雄辩查询

{...用Eloquent实现自联接,其中在单独的col中提到了父类别:原始Sql查询:DB::select("SELECTc.id,c.name,parents.nameAS}

Group_concat - laravel 雄辩

{...】:2014-11-0823:04:32【问题描述】:请在使用eloquent而不是原始查询的查询中使用group_concat。这是我尝试执行但对我不起作用的代码:commands::join(\'products\',\'products.id\',\'=\',\'commands.idproduct\')-}

将数据库关系转换为 Eloquent 关系

{】将数据库关系转换为Eloquent关系【英文标题】:translatingdatabaserelationshipstoEloquentrelationships【发布时间】:2015-11-1518:39:27【问题描述】:所以,我一直在尝试从laracast中观察和解读雄辩的关系。不幸的是,我仍然不太明白如何将...}

带有连接的雄辩选择并且在原始语句中不存在

{】带有连接的雄辩选择并且在原始语句中不存在【英文标题】:Eloquentselectwithjoinandnotexistsinrawstatement【发布时间】:2021-10-0907:41:26【问题描述】:我需要这样写选择语句:SELECTco.idFROMclient_ordercoINNERJOINclient_order_statuscosONcos.id=co.ord...}

将 Django 过滤器转换为 RAW SQL 查询 [重复]

{...,谁能帮我解决这个问题?我想将django过滤器查询转换为原始sql查询,下面是示例Django查询Product.objects.filter(name__icontains=self.request.GET.}

Copyright ©2021 时间戳转换器 小常识 114pp | 陕ICP备18005036号