Сначала всегда нужно прикинуть, как выглядят "хотелки" с точки зрения SQL. Если можете написать простой запрос, выполняющий требуемую задачу - перевести это в термины отношений труда уже не составит.
В Yii, конечно, дофига магии, но она не всегда хорошо работает. Нужно следить, контролировать и при необходимости бить по рукам.
@0neS А вот когда заказчик попросит вывести список товаров с главной картинкой неподалеку (а он стопудово попросит, знаю я их) - тогда и надо будет что-то придумывать.
Но, скажем, имея проставленный флаг primary Вы сможете выдернуть весь список с картинками максимум в два запроса (один на товары, второй на изображения, дальше Yii сам разберется). Можно и в один (left join), но не факт, что это эффективнее будет.
@0neS В Вашем случае вообще непонятно, зачем использовать отдельное отношение.
Вы же наверняка дергаете photos для извлечения всех фотографий, оттуда и выдерните.
Если порядок сортировки такой, как надо - то просто нулевой элемент массива хватайте. Если какой-то другой - достаточно просто пробежаться по массиву и найти нужный.
БД хотя бы пожалейте, какие все чёрствые прям стали.
@0neS 1. а Вы итоговый запрос посмотрите (в дев-панели). Я сам пока не проверял, но интуитивно понятно, что тут либо подзапрос нужен, либо группировка, а Yii без дополнительных телодвижений сам такое делать не будет.
2. Любым доступным способом явно прописываю "обложку". Это может быть флаг в таблице изображения, или cover_id у товара + belongs_to, или явно прописанный путь до обложки, или еще что-то типа blob прямо в товаре. Целостностью при этом занимаются хуки или триггеры, тут уж никуда не деться, зато не приходится каждый раз опрашивать кучу изображений, сортировать и извлекать одно, и так для каждой записи.
Ну, жаба душит просто, из-за какой-то сраной картинки БД дрючить.
Уточнение по пункту 1: если Вам действительно нужно будет выводить список с картинкой - такое отношение не сработает, увы.
Ну, точнее, сработает, но через задницу.
Ваш код можно условно свести вот к этому: jsfiddle.net/x9k2n
Первая кнопка выставляет значение, вторая - получает.
Все работает.
У меня подозрение, что Вы пытаетесь получить значение query ДО того момента, когда оно было проинициализировано, отсюда undefined. В этом случае Вам предстоит увлекательное чтиво про асинхронное программирование.
@eXod к сожалению, потерял ссылку, но суть там была такая: некое HR-агенство пилит под себя систему поиска кандидатов, основанную на ИИ (если пороетесь на hh.ru - наверняка быстро найдете). Этакая бездушная машина на службе человека.
Полагаю, можно было бы съездить к ним и обрисовать ситуацию.
По окончании у Вас будет отличный диплом, а у эйчаров - отличная система (собственно, предположу, что они Вас сразу после выпуска заберут к себе на фуллтайм)