Ich brauche nur die Anzahl, will nicht die Ergebnisse abrufen oder Abfrage für jede Zeile jedes Mal durchführen. Deshalb möchte ich eifrig laden.
Ich habe 3 Tabellen wie folgt aus:Zähle aus hasManyThrough-Beziehung mit eifrigem Laden (brauche nur Count)
Admins
id
Posts
id
admin_id
Comments
id
user_id //nullable (null if comment from admin)
admin_id //nullable (null if comment from user)
news_id
Jetzt möchte ich alle Beiträge von einem einzigen Server-Betreiber und alle Kommentare von dieser Stellen zählen abzurufen, ohne alle Kommentare für Beiträge abrufen, nur COUNT von Kommentaren, Mit eifrigen Laden, um n + 1 Abfrageproblem zu vermeiden;
Hier denke ich, dass wir eine Beziehung verwendet werden, machen sollte mit gespannter Laden wie folgt aus:
//admin model
public function commentsCountRelation()
{
return $this->hasManyThrough(Comment::class, News::class, 'admin_id', 'news_id')
->selectRaw('news_id, count(*) as count')
->groupBy('news_id');
}
--Look Hier verwendete ich hasManyThrough
Beziehung, weil news_id nicht in Admins
Tabelle ist.
Dann sollte ich ein Attribut machen, die Zählung easyly zugreifen zu können, wie:
public function getCommentsCountAttribute()
{
return $this->commentsCountRelation->first()->count ?? 0;
}
Zugriff es dann mag:
$admin = Admin::with('commentsCountRelation')->findOrFail($id);
$admin->commentsCount;
Aber es gibt immer null
, warum ist das so?
//relation
public function ordersCountRelation()
{
return $this->hasOne(Order::class)->selectRaw('user_id, count(*) as count')
->groupBy('user_id');
}
//attribute
public function getOrdersCountAttribute()
{
return $this->ordersCountRelation->count ?? 0;
}
//Then accessed like:
$user = User::with('ordersCountRelation')->find($id);
$user->ordersCount; //return only count
Jede Hilfe wird sehr geschätzt
werden
ich nicht verstand. Die App hat mehrere Admins und alle von ihnen hat Beiträge. Jetzt brauche ich alle Beiträge von bestimmten Admin & alle Kommentare zählen für nur diese Beiträge, In Frage ich beschrieben Tabellenstruktur & ich brauche diesen Kommentar zählen, während ich mit 'Admin' Modell arbeiten, Können Sie mir bitte erklären, wie tue ich das ohne "hasManyThrough", da ich nicht für alle Posts, sondern nur für Posts von diesem Admin Zählungen bekommen möchte. Ich brauche das so (nach dem Schleifen) '$ admin-> post-> commentCount' Ich werde hoch schätzen, wenn Sie mir ein Codebeispiel geben oder kurz erklären – APu
Relations:' Admin' hat 'hasMany' mit' Post 'hat' hasMany' mit 'Comment' – APu
Ich denke auch, dass Ihre Methode nicht eifrig lädt, oder? Kannst du mir bitte sagen, was der Effizienzvorteil ist, indem du deine Erwähnung anstelle von $ admin-> post-> comments-> count() 'verwendest – APu