2017-01-22 3 views
0

Auf meiner Website erlaube ich Benutzern, Bilder/Bilder/Lieblingsbilder/etc hochladen.orderBy Attribute einer anderen Tabelle in Laravel

Deshalb habe ich für Bilder einen Tisch bekam, mag, Favoriten etc.

Ich kann diese Bilder ganz gut erhalten und anzuzeigen, und sie sortieren, wie ich

$images = Images::orderBy('id', 'desc')->Paginate(50); 

wie kann ich zeige auch an, wie viele Likes/Favoriten ein Bild hat.

$favCount = Favorite::where('image_id', $image->id)->count(); 

Allerdings, was würde ich tun, um Bilder zu sortieren, sagen wir, wie viele Favoriten haben sie? Ich habe ein Lieblingsmodell und ein Bildmodell, aber ich bin mir nicht sicher, wie ich das machen würde.

EDIT:

Aktuelle Abfrage für die Antwort gegeben:

$images = Images::join('favorites', 'favorites.image_id', '=', 'images.id') 
->select('images.link', DB::raw('count(favorites.id) as favs')) 
->orderBy('favs', 'desc') 
->groupBy('images.link') 
->take(10) 
->get();   

und der Fehler ist:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'images' in 'field list' (SQL: select images , count(favorites.id) as favs from images inner join favorites on favorites . image_id = images . id group by images . link order by favs desc limit 10)

+1

Haben Sie es mit 'DB' versucht, wie ich es getan habe? Ich denke, der Fehler kommt von 'Images :: raw()'. Versuchen Sie 'Images :: raw' durch 'DB :: raw()' zu ersetzen. Oder führe alle Abfragen mit 'DB' aus, wie ich es getan habe. Und sehen Sie die Ergebnisse. Bitte. – EddyTheDove

+0

Ah, du hattest Recht. Entschuldigung, dies ist das erste Mal, dass ich rohe Ausdrücke verwende. Immer noch ein Fehler. Die neue Abfrage und der Fehler befinden sich im Hauptpost. Danke, dass du mir geholfen hast! –

+1

In Ihrer Tabelle 'images' wenn Sie eine Eigenschaft' link' oder 'name' haben. Versuchen Sie 'auszuwählen '(' link ', DB :: raw (' count (favorites.id) als Favoriten '))' '. Es scheint, dass Sie keine Eigenschaft 'images' in Ihrer Tabelle' images' haben. Kannst du es alles mit 'DB' versuchen und sehen, ob es funktioniert? – EddyTheDove

Antwort

1

Sie können Benutzer Query Builder wie folgt aus:

$images = DB::table('images') 
->join('favorites', 'favorites.image_id', '=', 'images.id') 
->select('images.link', DB::raw('count(favourites.id) as favs')) 
->orderBy('favs', 'desc') //order in descending order 
->groupBy('images.link') 
->take(10) //limit the images to Top 10 favorite images. 
->get(); 

Das gleiche könnte mit Eloquent erreicht werden.

+0

die Zeile -> auswählen ('images.link', Bilder :: roh ('count (favourites.id) als favs') gibt mir den Fehler Parse error: Syntaxfehler, unerwartete ';', erwartet ',' oder ') ". Wenn ich diese Zeile und die Zeilen danach entferne und ich nur den Join und den get habe, habe ich keinen Fehler. (es gibt alle Bilder mit Favoriten zurück) –

+0

nvm fehlte eine schließende Klammer. Jetzt bekomme ich strtolower() erwartet Parameter 1 als String, Objekt gegeben –

+1

Welche Zeile erzeugt diesen Fehler? Dieser Code funktioniert auf meinem Computer (nachdem die fehlende Klammer repariert wurde). – EddyTheDove

1

Ihre Abfrage sollte sein.

$images = Images::join('favorites', 'favorites.image_id', '=', 'images.id') 
->orderBy('favs', 'desc') 
->groupBy('images.link') 
->take(10) 
->get(['images.link', DB::raw('count(favorites.id) as favs')]); 
+0

Vielen Dank für Ihre Antwort. Aber ich bekomme immer noch den gleichen Fehler wie oben, SQLSTATE [42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte 'images.link' in 'Feldliste' –

+0

Hey Felix. "Link" ist nur ein Attribut, das ich erfunden habe. Fügen Sie eigene Image-Modellattribute ein. Bitte. Danke Patel für den Beitritt. – EddyTheDove

+0

Ok Ich habe versucht, images.link mit Bildern zu wechseln.Titel, und ich kann eine Liste von Bildtiteln mit {{$ image-> title}} in meiner foreach-Schleife in meiner Blade-Vorlage ausdrucken, aber ich kann kein anderes Attribut wie {{$ image -> Beschreibung}}. Im Idealfall möchte ich alle Attribute der Tabelle erhalten können. –

Verwandte Themen