Yii1 - критерии CActiveDataProvider не работают должным образом - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь перевести этот запрос на CActiveDataProvider:

// SELECT p.id "
//     . "FROM projects AS p "
//     . "LEFT JOIN purged_files AS pf ON p.id = pf.project_id "
//     . "WHERE pf.id IS NULL "
//     . "AND `new_status_id` IN ('DELIVERED', 'PAID') "
//     . "AND `created` <= '" . date("Y-m-d H:i:s", strtotime("-" . $lifetime_days . " DAYS")) . "' "
//     . "ORDER BY id DESC "
//     . "LIMIT 0, 5000")

Текущий код:

<code>$criteria->select    = "project.id";
$criteria->join      = 'LEFT JOIN purged_files ON project.id = purged_files.project_id';
$criteria->order     = "project.id desc";
$criteria->condition = "`new_status_id` IN ('DELIVERED', 'PAID') AND `created` <= '" . date("Y-m-d H:i:s", strtotime("-180 DAYS")) . "'";
$criteria->limit     = 5000;
$criteria->offset    = 0;

$dataProvider = new CActiveDataProvider('Project', array(
    'criteria'   => $criteria,
));

$iterator = new CDataProviderIterator($dataProvider);

foreach ($iterator as $project) {
    echo $project->id . "<br>";
}

var_dump('<pre>', "end", '
'); умереть;

Когда я запускаю это, я получаю эту ошибку:

CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'project.id' in 'on clause'. The SQL statement executed was: SELECT COUNT(*) FROM `projects` `t` LEFT JOIN purged_files ON project.id = purged_files.project_id WHERE (`t`.`status` <> "DELETED" AND `t`.`status` <> "CANCELED" AND `t`.`status` <> "ARCHIVED") AND (`new_status_id` IN ('DELIVERED', 'PAID') AND `created` <= '2017-12-29 13:31:42')

В чем здесь проблема?

1 Ответ

0 голосов
/ 27 июня 2018

Вы используете неверный псевдоним в ваших условиях. Таблица основных моделей имеет псевдоним t, поэтому либо вы должны использовать t в качестве псевдонима в вашем состоянии, чем project:

$criteria->order = "t.id desc";

Или перезаписать псевдоним в критериях:

$criteria->alias = 'project';
...