Symfony, вывод с сортировкой

220
21 июня 2018, 01:00

Есть две сущности Product и Category

Product связан с Category

/**
 * @ORM\ManyToOne(targetEntity="Category", inversedBy="category")
 * @ORM\JoinColumn(name="category_id", referencedColumnName="id")
 */
private $category;

Мне нужно вывести все продукты с учётом категорий т.е. сначала все продукты одной категории, потом другой и т.д.

я в классе репозитория продукта делаю такую выборку

$query = $this->getEntityManager()
        ->createQuery('
            SELECT p
            FROM AppBundle:Product p
            order by p.category DESC           
        ');

И получаю вот такую ошибку

An exception has been thrown during the rendering of a template ("An exception occurred while executing 'SELECT DISTINCT id_0 FROM (SELECT p0_.id AS id_0, p0_.title AS title_1, p0_.slug AS slug_2, p0_.description AS description_3, p0_.small_description AS small_description_4, p0_.tech_characteristic AS tech_characteristic_5, p0_.tabl_koef AS tabl_koef_6, p0_.sertific AS sertific_7, p0_.price AS price_8, p0_.vt AS vt_9, p0_.lm AS lm_10, p0_.ip AS ip_11, p0_.seo_description AS seo_description_12, p0_.seo_keys AS seo_keys_13, p0_.is_new AS is_new_14, p0_.is_popular AS is_popular_15 FROM products p0_) dctrn_result ORDER BY vt_9 ASC, p0_.category_id DESC LIMIT 12 OFFSET 0':

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'p0_.category_id' in 'order clause'").

В чём может быть проблема? Заранее спасибо!

Answer 1

Ну если раскрутить в приличный вид этот хлам, получится запрос

SELECT DISTINCT id_0 
FROM (  SELECT 
            p0_.id AS id_0, 
            p0_.title AS title_1, 
            p0_.slug AS slug_2, 
            p0_.description AS description_3, 
            p0_.small_description AS small_description_4, 
            p0_.tech_characteristic AS tech_characteristic_5, 
            p0_.tabl_koef AS tabl_koef_6, 
            p0_.sertific AS sertific_7, 
            p0_.price AS price_8, 
            p0_.vt AS vt_9, 
            p0_.lm AS lm_10, 
            p0_.ip AS ip_11, 
            p0_.seo_description AS seo_description_12, 
            p0_.seo_keys AS seo_keys_13, 
            p0_.is_new AS is_new_14, 
            p0_.is_popular AS is_popular_15 
            FROM products p0_
    ) dctrn_result 
ORDER BY 
    vt_9 ASC, 
    p0_.category_id DESC 
LIMIT 12 OFFSET 0

Сразу видно, что p0_.category_id не может видеться во внешнем запросе. Он теперь стал dctrn_result.category_id.

Но неиспользование всего этого бешеного набора полей и отсутствие каких-либо условий отбора заставляет спросить: почему не просто

SELECT DISTINCT id_0
FROM products 
ORDER BY 
vt ASC, category_id DESC 
LIMIT 12 OFFSET 0

?

PS. Как всё это должно выглядеть в Симфонии - не спрашивайте, не знаю...

READ ALSO
Запись вектора из текстового файла в бинарный?

Запись вектора из текстового файла в бинарный?

Есть файл inputtxt с таким содержимым:

271
Ошибка с преобразованием

Ошибка с преобразованием

При вызове этой функции компилятор выдает ошибку

578
Правильная выгрузка DLL

Правильная выгрузка DLL

Делаю следующие события:

195