Benutzer kann sich für mehrere Turniere anmelden und Jedes Turnier hat einen Score-Datensatz für jeden Benutzer.Verwenden des Abfragebereichs, jedoch mit anderem Abfragemodell - Laravel
Ich habe in Score-Tabelle gehalten User_id die Datensätze eindeutig zu halten.
Ich habe diese Abfrage:
$tournaments = DB::table('tournaments')
->join('scores','tournaments.id','=','scores.tournament_id')
->select('tournaments.*','scores.score','scores.tees')
->where('t_date','<',Carbon::today())
->where('scores.user_id',$request->user()->id)
->get();
I schließt sich vermeiden wollte und verwenden auch Abfragebereich für die Wiederverwendung von where-Klausel '(t_date < Carbon::today())'
Also, das ist die Abfrage ich gekommen bin, oben mit:
//This is in Tournament Model
public function scopeUpcoming($query)
{
return $query->where('t_date','>',Carbon::today());
}
$query = Score::with('tournaments')
->upcoming()
->where('user_id',$request->user()->id)
->get();
Aber scopeUpcoming() verwendet Abfrage $ und es gibt keine ‚t_date‘ in Score-Tabelle, also muss ich irgendwie Turniere Tabelle und Abfrage auf sie zugreifen zu können. Umgekehrt kann ich nicht mit Tournament :: with ('scores') gehen, da es keine 'user_id' in der Tabelle des Turniers gibt, so dass ich für einen bestimmten Benutzer nicht zugreifen kann.
Und was ist der Grund für die Vermeidung von Joins? –
Ich habe viele Joins in meinen Controllern und ich finde Joins und rohe Abfragen sind eine Art von Hacks und ich verwende am wenigsten Eloquent-Modelle. Ich möchte MVC Framework so lernen wie es entworfen wurde. Ich versuche, Single/Multiple Joins zu vermeiden und eloquente Beziehungen effektiver zu nutzen. –