【发布时间】:2016-03-01 04:24:42
【问题描述】:
早安
如何从另一个模型中获取数据。? 我有一个搜索字段,我需要在其中搜索项目名称。然后我的 Cgridview 将显示选定的项目。
我的关系中有这个
public function relations() {
return array(
'project' => array(self::BELONGS_TO, 'RmProjects', 'project_id'),
);
}
我想在我的模型的搜索功能中访问 project_name..
public function search($employee, $search_date_start, $search_date_end, $search) {
$criteria = new CDbCriteria;
$criteria->with = array('eval' => array('together' => true));
$criteria->compare('employee_id', $this->employee_id);
$criteria->compare('remarks', $this->remarks, true);
$criteria->compare('eval_id', $this->eval_id);
//I tried it like this
$criteria->addSearchCondition('project.project_name', $search);
if ($employee != '') {
$criteria->compare('t.employee_id', $employee->company_id);
}
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}
当我这样做时,我得到一个错误。
CDbCommand 未能执行 SQL 语句:SQLSTATE[42S22]: 找不到列:1054 未知列 'project.project_name' 在 'where 条款'。执行的 SQL 语句是:SELECT COUNT(DISTINCT
t.id) FROMtrx_evaluation_detailst左外连接trx_evaluationevalON (t.eval_id=eval.id) 在哪里 ((project.project_name LIKE :ycp0)
我的代码有什么问题。?我尝试在当前模型中连接 RmProject 模型,以便我可以访问 project_name .. 但是,我得到了这个错误。请帮忙..
这是一个编辑:
这是我的全部关系部分
public function relations() {
return array(
'eval' => array(self::BELONGS_TO, 'Evaluation', 'eval_id'),
'project' => array(self::BELONGS_TO, 'RmProjects', 'project_id'),
);
}
我已经在我的模型中添加了这个,但它仍然没有工作。它只是改变了桌子。
$criteria->with = array('project' => array('together' => true));
$criteria->addSearchCondition('project.project_name', $search);
这是我的搜索功能。
public function search($employee, $search_date_start, $search_date_end, $search) {
$criteria = new CDbCriteria;
$criteria->with = array('eval' => array('together' => true));
$criteria->with = array('project' => array('together' => true));
$criteria->compare('employee_id', $this->employee_id);
$criteria->compare('remarks', $this->remarks, true);
$criteria->compare('eval_id', $this->eval_id);
$criteria->addSearchCondition('project.project_name', $search);
$criteria->addSearchCondition('start_date', $search_date_start, 'AND');
$criteria->addSearchCondition('end_date', $search_date_end, 'AND');
if ($employee != '') {
$criteria->compare('t.employee_id', $employee->company_id);
}
if ($search_date_end !== '' && $search_date_start !== '' && $search !== '') {
$criteria->condition = "start_date >= '$search_date_start' AND end_date <= '$search_date_end' AND project.project_name like '%$search%'AND t.employee_id = '$employee->company_id'";
}
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}
【问题讨论】:
-
错误很明显。生成的sql中没有项目表。您需要使用 t.project_name 或 eval.project_name 取决于哪个表包含列 - project_name。
-
project_name 在另一个模型中,这是我在我的关系中尝试过的 RmProject。
标签: php mysql sql-server yii