@EVOSandru6

Как выполнить AR Запрос в Yii на выборку записей по значению связанных данных?

Добрый день,

Есть 2 таблицы:

m_bids
------------
id

mc_points
------------
id
bid_id
time_start(int)
time_finish(int)
is_tart(bool)


Для одной записи в m_bids может быть только 2 записи в mc_points. Первая запись в mc_points - это отправная точка (is_start(true)) , вторая точка - финиш.

time_start и time_finish определяются для точки старта - диапазон старта.

Необходимо получить все m_bids, у которых time_finish у точки старта больше , чем текущее время (конечная точка нас не волнует, т.к. time_start и time_finish у неё пусты). Что-то типа :

SELECT * FROM m_bids LEFT JOIN mc_points ON m_bids.id  = mc_points.bid_id WHERE mc_pointsюtime_finish  is not NULL AND mc_points.time_finish  < 'x';


В связях для Bids выставлено:
'points' => [self::HAS_MANY, 'Points', 'bid_id'],

Но мне нужно не в цикле проверку делать, а именно запрос AR

Начал с этого:

$criteria = new CDbCriteria();
$criteria->join = 'LEFT JOIN mc_points ON `m_bids`.`id` = mc_points.bid_id';
$criteria->condition = 'mc_points time_finish IS NOT NULL AND time_finish  < '.time();
$model = Bids::model()->published()->getAll($criteria);


Ловлю:

CDbCommand не удалось исполнить SQL-запрос: SQLSTATE[42P01]: Undefined table: 7 ERROR: invalid reference to FROM-clause entry for table "m_bids"
LINE 1: ..._car_id" FROM "m_bids" "t" LEFT JOIN mc_points ON m_bids.id ...
^
HINT: Perhaps you meant to reference the table alias "t".. The SQL statement executed was: SELECT "t"."id", "t"."customer_id", "t"."driver_id", "t"."wish_price", "t"."views", "t"."name", "t"."name_kz", "t"."name_en", "t"."name_alias", "t"."description", "t"."description_en", "t"."description_kz", "t"."meta_d", "t"."meta_k", "t"."order_sort", "t"."sys_date", "t"."sys_date_update", "t"."sys_user", "t"."exist", "t"."urgency", "t"."shifr", "t"."name_full", "t"."name_full_kz", "t"."price_id", "t"."photo", "t"."status_id", "t"."category_car_id" FROM "m_bids" "t" LEFT JOIN mc_points ON m_bids.id = mc_points.bid_id WHERE (exist = 1) AND (mc_points.time_finish IS NOT NULL AND time_finish < 1441078315)


m_bids - 100% идет таблицей для класса Bids, что я делаю не так?
  • Вопрос задан
  • 303 просмотра
Решения вопроса 1
talgatbaltasov
@talgatbaltasov
Freelancer
SELECT * FROM m_bids LEFT JOIN mc_points ON m_bids.id = mc_points.bid_id WHERE mc_points.time_finish is not NULL AND mc_points.time_finish > CURDATE();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы