Beiträge von marvinrabe

    Moin Shayan,


    schöne Sache! Ich hoffe du hast nach 6 Videos noch nicht aufgegeben ;-) .


    Nimm doch am besten "Laravel 7" aus den Thumbnails raus. Mittlerweile ist Laravel 8 schon da, aber deine Tutorials sind trotzdem noch relevant. Deswegen spielt die Version womöglich keine Rolle, sonder schreckt vielleicht nur ab.

    Hallo Matze,

    wie du sicherlich weißt bekommst du hiermit eine Collection:

    Code
    1. $results = Testee::find(1)->results()->get();
    2. // oder
    3. $results = Testee::find(1)->results;

    Collections verhalten sich ähnlich zu PHP Arrays, haben allerdings einige spannende Funktionen. Siehe Dokumentation.

    Du kannst auf die Auditors und Testsubject zugreifen wie du es mit Werten in einem PHP Array gewohnt bist. Zum Beispiel so:

    Code
    1. $results = Testee::find(1)->results;
    2. foreach($results as $result) {
    3.     foreach($result->auditors as $auditor) {
    4.         echo $auditor->firstname;
    5.     }
    6. }

    Ähnlich dann auch mit den examinationsubjects.


    Zusätzlich stellt Laravel eine hasManyTrough Methode zur Verfügung. Siehe Dokumentation.

    Dazu musst du in der Testee Klasse folgendes definieren:

    Code
    1. class Testee extends Model
    2. {
    3. // Dein Code ...
    4. public function auditors()
    5. {
    6. return $this->hasManyThrough('App\Models\Result', 'App\Models\Auditor');
    7. }
    8. }

    Du kannst dann die Auditors eines Testees wie folgt abrufen.

    Code
    1. $testee = Testee::find(1);
    2. $auditors = $testee->auditors;
    3. // oder
    4. $auditors = $testee->auditors()->get();

    Du bekommst somit direkt die Auditors ohne zuerst dir alle Ergebnisse abzurufen. Ich weiß aber nicht ob das mit mehreren hintereinander geketteten Many-to-Many Beziehungen funktioniert. Das musst du ausprobieren.


    Ich hoffe ich konnte dir weiterhelfen.

    Hallo Joachim,

    da hast du zwei Möglichkeiten.


    1.) Die Spalte vom Datenbanksystem erst in die richtige Zeitzone bringen. Für MySQL wäre das so möglich:

    Code
    1. $query->whereYear(DB::raw("CONVERT_TZ(date,'UTC','MET')"), 2020);

    Aber Achtung: Der Spaltenname ist nicht vor SQL Injection geschützt. Wenn du MET durch eine Variable ersetzt, dann bitte darauf achten, dass nur gültige Werte gegeben werden können.


    2.) Manuell den Zeitraum abfragen, dazu Start und Enddatum in UTC mit Carbon generieren.

    Code
    1. $start= Carbon::create(2020, 1, 1, 0, 0, 0, 'Europe/Berlin')->setTimezone('UTC');
    2. $end= Carbon::create(2020, 12, 31, 23, 59, 59, 'Europe/Berlin')->setTimezone('UTC');
    3. $query->whereBetween('date', [$start, $end]);

    Ich bin mir momentan nur nicht sicher, ob whereBetween inklusive oder exkluse der Start- und Endwerte ist (sprich, ob die erste und letzte Sekunde enthalten ist oder nur die Zeit dazwischen). Das müsstest du einmal prüfen.

    Ich hoffe das hilft dir weiter.