Я пытаюсь написать запрос в yii. У меня есть следующее, которое работает
$criteria = new CDbCriteria; $criteria->condition = "($column = :id)"; $criteria->params = array(":id" => $id ); $rows = Jobs::model()->with('pROJ')->findAll($criteria);
Это возвращает модель Jobs в массиве. Мне нужно написать следующий запрос в yii, чтобы вернуть модель
SELECT jobs.JOBNO, jobs.STATUS, projects.ORDERNO, jobs.PROJID, jobs.NAME, jobs.SEQ, jobs.PCENTDONE, jobs.EARNED, jobs.VALUE, jobs.DATEIN, jobs.DATEDONE, jobs.DATEDUE, jobs.SENTBACK, jobs.ORIGTAPES, jobs.COMMENTS, projects.CATEGORY, orders.BIDNO FROM (jobs INNER JOIN projects ON jobs.PROJID = projects.PROJID) INNER JOIN orders ON projects.ORDERNO = orders.ORDERNO where jobs.projid = 3002001 ORDER BY jobs.JOBNO, jobs.PROJID
Я пробовал следующее, но он не работает
$rows = Yii::app()->db->createCommand() ->select('jobs.*, projects.ORDERNO, projects.CATEGORY, orders.BIDNO') ->from('jobs, projects, orders') ->join('projects p','jobs.PROJID = p.PROJID') ->join('orders o', 'p.ORDERNO = o.ORDERNO') ->where('jobs.projid=:id', array(':id'=>$id)) ->queryRow();
Я получаю следующую ошибку
CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'jobs.PROJID' in 'on clause'. The SQL statement executed was: SELECT `jobs`.*, `projects`.`ORDERNO`, `projects`.`CATEGORY`, `orders`.`BIDNO` FROM `jobs`, `projects`, `orders` JOIN `projects` `p` ON jobs.PROJID=p.PROJID JOIN `orders` `o` ON p.ORDERNO=o.ORDERNO WHERE jobs.projid=:id
Я обновил
$rows = Yii::app()->db->createCommand() ->select('jobs.*, projects.orderno, projects.category, orders.bidno') ->from('jobs') ->join('projects p','jobs.projid = p.projid') ->join('orders o', 'p.orderno = o.orderno') ->where('jobs.projid=:id', array(':id'=>$id)) ->queryRow();
но я все еще получаю ошибку. Все столбцы в mysql – это CAPS
CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'projects.orderno' in 'field list'. The SQL statement executed was: SELECT `jobs`.*, `projects`.`orderno`, `projects`.`category`, `orders`.`bidno` FROM `jobs` JOIN `projects` `p` ON jobs.projid = p.projid JOIN `orders` `o` ON p.orderno = o.orderno WHERE jobs.projid=:id
Поскольку @DCoder сказал: ваш выбор должен теперь читать select('jobs.*, p.orderno, p.category, o.bidno')
. Для согласованности вы также должны выполнять следующие jobs
:
$rows = Yii::app()->db->createCommand() ->select('j.*, p.orderno, p.category, o.bidno') ->from('jobs j') ->join('projects p','j.projid = p.projid') ->join('orders o', 'p.orderno = o.orderno') ->where('j.projid=:id', array(':id'=>$id)) ->order('j.jobno,j.projid') ->queryRow();
Я думаю, что вы должны удалять проекты, заказы от ->from('jobs, projects, orders')
и может быть, вы должны опустить дело jobs.PROJID
поскольку в сообщении об ошибке говорится, что он не смог найти столбец.