2017-01-22 3 views
0

На моем сайте я разрешаю пользователям загружать изображения/изображения/любимые изображения/и т. Д.orderBy атрибуты другой таблицы в Laravel

Таким образом, у меня есть таблица для изображений, любит, закладки и т.д.

я могу получить и отобразить эти изображения просто отлично, и сортировать их, как мне нравится

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

я могу также отображать, насколько понравилось/избранное изображение.

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

Однако, что бы я сделал, чтобы отсортировать изображения, скажем, сколько их у них есть? У меня есть любимая модель и модель изображения, но я не уверен, как бы я это сделал.

EDIT:

Текущий запрос для ответа, данного:

$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();   

и ошибка:

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

Вы попробовали это с помощью 'DB', как я? Я думаю, что ошибка исходит из 'Images :: raw()'. Попробуйте заменить 'Images :: raw' на' DB :: raw() '. Или сделайте весь запрос с 'DB', как я. И посмотрите результаты. Пожалуйста. – EddyTheDove

+0

Ах, ты был прав. Извините, это мой первый раз с использованием сырых выражений. Тем не менее, есть ошибка. Новый запрос и ошибка будут в главном сообщении. Спасибо, что помогли мне! –

+1

В вашей таблице 'images', если у вас есть свойство' link' или 'name'. Попробуйте 'select ('link', DB :: raw ('count (favorites.id) как favs'))'. Кажется, у вас нет свойств 'images' в вашей таблице' images'. Можете ли вы попробовать все с помощью «БД», как я это сделал, и посмотреть, работает ли это? – EddyTheDove

ответ

1

Вы можете построитель запросов пользователей, как это:

$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(); 

То же самое можно сделать с помощью Красноречивого.

+0

строка -> select ('images.link', Images :: raw ('count (favourites.id) как favs') дает мне ошибку Parse error: синтаксическая ошибка, неожиданные ';', ожидающие ',' или '). Если я удалю эту строку и строки после, и у меня есть только соединение и get, у меня нет ошибки. (он возвращает все изображения с избранными) –

+0

nvm не хватало закрывающей скобки. Теперь я получаю strtolower() ожидает, что параметр 1 является строкой, заданный объект –

+1

Какая строка производит эту ошибку? Этот код отлично работает на моем компьютере (после фиксации отсутствующей скобки). – EddyTheDove

1

Ваш запрос должен быть.

$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

Спасибо за ваш ответ. Но я все еще получаю ту же ошибку, что и наверху, SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец «images.link» в «списке полей» –

+0

Привет, Феликс. 'link' - это всего лишь атрибут, который я составил. Поместите свои собственные атрибуты модели «Image». Пожалуйста. Спасибо, Пател, за то, что присоединился. – EddyTheDove

+0

Хорошо, я попытался отключить images.link с изображениями.название, и я могу распечатать список названий изображений с {{$ image-> title}} в моем цикле foreach в моем шаблоне клинка, однако я не могу напечатать какой-либо другой атрибут, например {{$ image -> description}}. В идеале я хотел бы получить все атрибуты таблицы. –

Смежные вопросы