如何使用 laravel ORM eloquent 5.8 选择我数据库中每个促销活动的总下载量?

Posted

技术标签:

【中文标题】如何使用 laravel ORM eloquent 5.8 选择我数据库中每个促销活动的总下载量?【英文标题】:How to select the total downloads of each promotion that I have in my database, with laravel ORM eloquent 5.8? 【发布时间】:2019-06-30 20:25:00 【问题描述】:

使用 laravel,我需要在图表中显示兑换促销的次数。我可以获得开始会话的每个用户发布的促销信息,但我需要您将这些数据放入图表中。非常感谢您的帮助。


当前代码:

    $nombres = Promociones::where('user_id',Auth::user()->id)->pluck('nombre_promocion', 'id');

    $promociones = [];
    $descargadas = [];

    foreach ($nombres as $key => $val)
    
        $promociones[] = $val;
        $descargadas[] = Promociones::where('user_id',$key)->count();
      

    $chart = new UserPromociones;
    $chart->title(' Promociones publicadas ');
    $chart->labels($promociones);
    $chart->dataset('Numero de promociones','bar', ($descargadas));
    $chart->dataset('Total de promociones publicadas = '.$total_promociones,'bar',[]);

所需的图形输出:

【问题讨论】:

您确定$nombres 是用用户ID 键入的吗? 【参考方案1】:

我认为问题出在这一行

$descargadas[] = Promociones::where('user_id',$key)->count();

因为您只查找与数组索引匹配的 user_id!

应该是这样的

$descargadas[] = Promociones::where('user_id',$val)->count();

$descargadas[] = Promociones::where('user_id',$val->id)->count();

即使这样可行,那也不是最好的方法,最糟糕的做法是循环查询数据库,这太可怕了

如果数据不是那么大,你可以在foreach之前做类似的事情

$promociones = collect(Promociones::all()->toArray());

这会将模型提取到一个集合中,然后任何 where 子句都将是一个集合中的搜索,并且每次都不需要数据库查询。

 $promociones = collect(Promociones::all()->toArray());

 foreach ($nombres as $key => $val)
    
        $promociones[] = $val;
        $descargadas[] = $promociones->where('user_id',$val->any_filed)->count();
      

【讨论】:

感谢您朋友的建议,他们给了我解决我问题的想法这是解决方案$descargadas[] = Promociones::where('id',$key)->pluck('veces_cajeadas');

以上是关于如何使用 laravel ORM eloquent 5.8 选择我数据库中每个促销活动的总下载量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Eloquent ORM laravel 中获取最后一个插入 ID

如何在 Laravel Eloquent ORM 中获取插入的多行数据

如何在不使用Eloquent ORM时构建Laravel应用程序

laravel Eloquent ORM - 如何获得编译查询?

Angular JS 与 Laravel - 如何绑定 Eloquent ORM 数组以查看

如何根据 laravel eloquent orm 中的两列进行查询