За последние 24 часа нас посетили 20337 программистов и 1082 робота. Сейчас ищут 744 программиста ...

Сортировать по order by

Тема в разделе "Laravel", создана пользователем alex.kot, 26 июн 2019.

Метки:
  1. alex.kot

    alex.kot Новичок

    С нами с:
    10 апр 2019
    Сообщения:
    23
    Симпатии:
    0
    Добрый день.
    Есть таблица books и таблица apartments.
    В таблице books есть колонка apartment_id, которая связана с apartments.
    Получаю все таким образом:
    Код (Text):
    1. Apartment::with('book')->with('user')->paginate(10);
    Вот, надо отсортировать по order by вывод apartments.
     

    Вложения:

  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
  3. alex.kot

    alex.kot Новичок

    С нами с:
    10 апр 2019
    Сообщения:
    23
    Симпатии:
    0
    Проблема в том что надо сортировать так чтоб, чем больше кол-во apartments_id в таблице books, тем выше его выводить, а не просто до числу apartments_id.
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.789
    Симпатии:
    646
    Т.е. даже по данной тут ссылке доку открыть никак?
     
  5. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    PHP:
    1. Apartment::with('book')->with('user')->orderBy('apartment_id', 'desc')->paginate(10);
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    @Dimon2x, как обычно, мимо.
    @alex.kot, ну тут надо запросик посложнее. Или денормировать таблицу. Мне сейчас прямо составлять лениво, может позже.
    --- Добавлено ---
    Подскажу только, что тебе надо join делать с запросом
    Код (Text):
    1. select count(1), appartment_id from books group by apparment_id
     
  7. alex.kot

    alex.kot Новичок

    С нами с:
    10 апр 2019
    Сообщения:
    23
    Симпатии:
    0
    Да, похоже на правду, спасибо.
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    Если связи в классах описаны, попробуй так:
    PHP:
    1. Apartment::withCount('book')->orderBy('book_count', 'desc')->get();
    Чтобы посмотреть какой реально генерируется SQL-запрос, надо ->get() надо заменить на ->toSql() и вывести как строку. Будет что-то вроде

    Код (SQL):
    1. SELECT
    2.   `apartments`.*,
    3.   (SELECT COUNT(*) FROM `books` WHERE `apartmets`.`id` = `books`.`apartment_id`) AS `books_count`
    4. FROM `apartments`
    5. ORDER BY `books_count` DESC
    --- Добавлено ---
    P.S. странный парсер ббкода тут. он сам преобразует служебные слова в верхний регистр (и может ошибаться)
     
    mkramer нравится это.
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
  10. alex.kot

    alex.kot Новичок

    С нами с:
    10 апр 2019
    Сообщения:
    23
    Симпатии:
    0
    Спасибо, то что нужно!
     
  11. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Это же можно так:
    PHP:
    1. SELECT apartments.*, books_count
    2. FROM(
    3.    SELECT apartments_id AS id, COUNT(*) AS books_count
    4.    FROM books GROUP BY apartments_id)AS b
    5. JOIN apartments
    6. USING(id)
    7. ORDER BY books_count DESC
     
  12. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Как? (у меня сломался внутренний парсер и я не могу представить себе как с помощью связей получить eloquent`ом такой вариант запроса)