php laravel получает данные из базы данных за прошлую неделю

#php #mysql #arrays #laravel

#php #mysql #массивы #laravel

Вопрос:

Я пытаюсь получить данные из базы данных в единый массив

Это то, что я пробовал: foreach перебирает все даты дней 1-й недели и каждый раз выполняет этот запрос для получения данных

 foreach ($list1 as amp;$day){
           $pleads = DB::table('leads')
            ->selectRaw('count(*)') 
            ->whereColumn('owned_by_id', 'users.id')
            ->where('lead_source_id', 7)
            ->whereRaw("DATE(created_at) = '$day'");

            $mleads = DB::table('leads')
                    ->selectRaw('count(*)')
                    ->whereColumn('owned_by_id', 'users.id')
                    ->where('lead_source_id', 3)
                    ->whereRaw("DATE(created_at) = '$day'");

            $aleads = DB::table('leads')
                    ->selectRaw('count(*)')
                    ->whereColumn('owned_by_id', 'users.id')
                    ->where('lead_source_id', 4)
                    ->whereRaw("DATE(created_at) = '$day'");

            $personalleads = DB::table('users') 
                    ->where('id', $id) // User ID
                    ->select('users.id')
                    ->selectSub($pleads, 'pleads')
                    ->selectSub($mleads, 'mleads')
                    ->selectSub($aleads, 'aleads')
                    ->get();
                    return $personalleads;
                     }
  

когда я делаю это, я получаю только 1 вывод, например:

 [{"userid":1,"pleads":2,"mleads":1,"aleads":1}]  
  

но то, что я хочу в качестве результата, приведено ниже

 [{"userid":1,"pleads":2,"mleads":1,"aleads":1},{"userid":1,"pleads":0,"mleads":0,"aleads":0},{"userid":1,"pleads":0,"mleads":0,"aleads":0},{"userid":1,"pleads":1,"mleads":0,"aleads":0},{"userid":1,"pleads":1,"mleads":0,"aleads":0},{"userid":1,"pleads":1,"mleads":0,"aleads":0},{"userid":1,"pleads":0,"mleads":0,"aleads":0}]
  

но я думаю, что это несколько объектов, я не могу собрать их в один массив

Ответ №1:

Вы возвращаетесь из цикла на первой итерации. Вместо этого сохраните результаты в массиве и возвращайте вне цикла.

 $results = [];
foreach ($list1 as amp;$day){
    $personalleads = ....
    array_push($results, personalleads);
}
return $results;
  

Комментарии:

1. Большое вам спасибо, но я получаю такой результат ` . [[{«id»:1,»pleads»:2,»mleads»:2,»aleads»:1,»totalLead»:5,»listingOnCRM»:0,»followUpOnCRM»:0,»numberOfDeals»:0,»numberOfSales»:0}],[{«id»:1,»pleads»:0,»mleads»:0,»aleads»:0,»totalLead»:0,»listingOnCRM»:0,»followUpOnCRM»:0,»numberOfDeals»:0,»numberOfSales»:0}] ] ` я не могу разобрать это с помощью jQuery, как объединить их в один массив? Нравится

2. ` [{«id»:1,»pleads»:2,»mleads»:2,»aleads»:1,»totalLead»:5,»listingOnCRM»:0,»followUpOnCRM»:0,»numberOfDeals»:0,»numberOfSales»:0},[{«id»:1,»pleads»:0,»mleads»:0,»aleads»:0,»totalLead»:0,»listingOnCRM»:0,»followUpOnCRM»:0,»numberOfDeals»:0,»numberOfSales»:0}]`