0

ich auf Laravel 5.4 eine kleine Anwendung baue, wo ich Daten habe setzt sich aus der Beziehung etwas wie dieses die Anzahl der Interaktionen als investor_counts zwischen diesem bestimmten Datum, ich möchte die Zählungen zwischen bestimmten Datumsfeldern abrufen, dh nehme an, dass ich die Daten für aufeinanderfolgende 6 Monate abrufen möchte, meine ich Daten von 6 verschiedenen Monaten in etwa so:Wie mehrere bekommen zwischen denen Datensätze in Laravel

->whereBetween('schedule', [Carbon::now()->subMonths(6), Carbon::now()->subMonths(5)]) 

und

->whereBetween('schedule', [Carbon::now()->subMonths(5), Carbon::now()->subMonths(4)]) 

und

->whereBetween('schedule', [Carbon::now()->subMonths(4), Carbon::now()->subMonths(3)]) 

Und die Liste geht weiter ähnlich wie oben Unterschiede. Und ich möchte nicht mehrere foreach Schleifen implementieren, gibt es einen Ausweg mit Laravel Collection, wo ich solche Daten manipulieren kann, um die Ausgabe zu bekommen. Bitte führen Sie mich. Vielen Dank.

Edit: Lassen Sie mich in eine bessere Art und Weise erklären, die derzeit diesen Code verwende ich meine gewünschten Daten zu erhalten:

public function investorGraphData(Request $request) 
{ 
    $weekInvestorData = $weekResearchData = []; 

    if($request->timeFormat == 'month') 
    { 
     for($i=0; $i<6; $i++) 
     { 
      $meetings = Company::where('name', $request->client) 
       ->withCount(['interactions as investors'=> function ($q) use($i) { 
        $q 
         ->whereBetween('schedule', [Carbon::now()->subMonth($i+1), Carbon::now()->subMonth($i)]) 
         ->whereHas('contactsAssociation', function ($q) { 
          $q->whereHas('company', function ($q) { 
           $q->where('type', 'like', 'Investor'); 
          }); 
         }); 
       }]) 
       ->withCount(['interactions as research' => function($q) use($i) { 
        $q 
         ->whereBetween('schedule', [Carbon::now()->subMonth($i+1), Carbon::now()->subMonth($i)]) 
         ->whereHas('contactsAssociation', function ($q) { 
          $q->whereHas('company', function ($q) { 
           $q->where('type', 'like', 'Research'); 
          }); 
         }); 
       }]) 
       ->get(); 
      $weekInvestorData[] = $meetings[0]->investors_count; 
      $weekResearchData[] = $meetings[0]->research_count; 
     } 

     return response()->json(['investor' => $weekInvestorData, 'research' => $weekResearchData], 200); 
    } 
    elseif ($request->timeFormat == 'week') 
    { 
     for($i=0; $i<6; $i++) 
     { 
      $meetings = Company::where('name', $request->client) 
       ->withCount(['interactions as investors'=> function ($q) use($i) { 
        $q 
         ->whereBetween('schedule', [Carbon::now()->subWeek($i+1), Carbon::now()->subWeek($i)]) 
         ->whereHas('contactsAssociation', function ($q) { 
          $q->whereHas('company', function ($q) { 
           $q->where('type', 'like', 'Investor'); 
          }); 
         }); 
       }]) 
       ->withCount(['interactions as research' => function($q) use($i) { 
        $q 
         ->whereBetween('schedule', [Carbon::now()->subWeek($i+1), Carbon::now()->subWeek($i)]) 
         ->whereHas('contactsAssociation', function ($q) { 
          $q->whereHas('company', function ($q) { 
           $q->where('type', 'like', 'Research'); 
          }); 
         }); 
       }]) 
       ->get(); 
      $weekInvestorData[] = $meetings[0]->investors_count; 
      $weekResearchData[] = $meetings[0]->research_count; 
     } 
     return response()->json(['investor' => $weekInvestorData, 'research' => $weekResearchData], 200); 
    } 
    else 
     return response()->json(['message' => 'No input given'], 200); 
} 

Gibt es eine Möglichkeit den Code durch die Sammlung zu verkürzen?

+0

Sie können Datensätze direkt ab dem 1. Datum und dem letzten Datum abrufen und dann nach Datum sortieren –

+0

@Rohitshah Ich denke, Sie haben meine Frage nicht bekommen. Ich kann Datensätze zwischen zwei Daten abrufen. Ich möchte Datensätze für jeden Monat abrufen, also zwischen dem aktuellen Datum und dem letzten Monat, zwischen dem letzten Monat und den letzten zwei Monaten. –

Antwort

0

können Sie versuchen, Spalte als anderen Namen zu geben,

Zum Beispiel:

$meetings = Company::where('name', 'Atlanta Ltd') 
    ->withCount(['interactions as investors'=> function ($q) { 
     $q 
      ->whereBetween('schedule as schedule6to5', [Carbon::now()->subMonths(6), Carbon::now()->subMonths(5)]) 
      ->whereBetween('schedule as schedule5to4', [Carbon::now()->subMonths(5), Carbon::now()->subMonths(4)]) 
      ->whereBetween('schedule as schedule4to3', [Carbon::now()->subMonths(4), Carbon::now()->subMonths(3)]) 
      ->whereHas('contactsAssociation', function ($q) { 
       $q->whereHas('company', function ($q) { 
        $q->where('type', 'like', 'Investor'); 
       }); 
      }); 
    }])->get() 
    ->transform(function ($company) { 
     $company->investors_count = $company->interactions 
      ->pluck('investors_count') 
      ->sum(); 
     return $company; 
    }); 

Kann dies funktionieren wird.

+0

Hallo Bhavin danke für das Update, aber ich zähle die Liste der Interaktion als investors_count zwischen diesen Daten und ich möchte diese Zählungen für separate Daten haben, sorry, wenn ich in der Frage nicht klar war. Ich habe die Frage auch aktualisiert –

Verwandte Themen