2016-05-25 3 views
0

Ich benutze Laravel 5.1. Ich habe zwei ModelleWie eloquent verwenden, um Datensätze basierend auf Tabellenspalte und Anzahl der hasMany-Beziehung zurückgeben

articles 
authors 

Ich möchte Artikel finden, die veröffentlicht wurden oder mehr als zwei Autoren haben. Was ist der einfachste Weg, dies eloquent zu tun?

$pub_articles = Articles::where('published',1)->get(); //get articles that are published 

Meine Vermutung ist, so etwas wie

$articles = Articles::where('published',1) 
       ->orWhere(Articles->authors::count(),'>',2); 

In SQL es möglicherweise auf diese Weise getan werden könnte

select a.id, a.published from articles a inner join authors au on a.id = au.article_id where a.published = 1 group by a.id, a.published having count(*) > 2 
+1

Sie haben eine viele zu viele Beziehung hier, da ich rate, ein Autor kann auch mehr als einen Artikel veröffentlichen. Haben Sie eine Referenztabelle eingerichtet (etwas, articles_authors' genannt)? –

+0

Sie haben Recht. Ich habe im Moment nicht darüber nachgedacht, dass ich versucht habe, verschiedene Abschnitte eloquenter und fragender Tabellen mit Beziehungen einzukreisen. Dies ist von Grund auf neu, es gibt im Moment keine Tabelle articles_authors. –

Antwort

0

Haben Sie has Methode versuchen?

Articles::has('authors', '>', 1)->where('published',1)->get(); 
+0

Has() funktioniert super, ich habe es in der Dokumentation übersehen. Vielen Dank. Ich änderte das "wo" in "orWhere". Artikel :: has ('authors', '> =', 2) -> orWhere ('published', 1) -> get(); –

Verwandte Themen