php - formularios - Yii-Cómo obtener datos de otro modelo
yii2 formularios dinamicos (2)
He resuelto este problema
en mis relaciones (), he agregado esta línea
''project'' => array(self::HAS_ONE, ''RmProjects'', array (''project_id''=>''project_id''), ''through''=> ''eval''),
esto se une a los modelos que tienen una conexión que pasa a través de otro modelo. y luego puede obtener los datos de otro modelo. Espero que esta respuesta pueda ayudar a cualquiera que tenga la misma pregunta que yo.
puedes leerlo aquí ... que está en consulta relacional usando a través de http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-with-through
Buenos días
¿Cómo obtengo datos de otro modelo? Tengo un campo de búsqueda en el que necesito buscar un nombre de proyecto. entonces mi Cgridview mostrará los proyectos seleccionados.
Tengo esto en mis relaciones
public function relations() {
return array(
''project'' => array(self::BELONGS_TO, ''RmProjects'', ''project_id''),
);
}
Ingrese a project_name en la función de búsqueda en mi modelo.
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,
));
}
cuando hago esto, obtengo un error.
CDbCommand no pudo ejecutar la instrucción SQL: SQLSTATE [42S22]: Columna no encontrada: 1054 Columna desconocida ''project.project_name'' en ''where clause''. La instrucción SQL ejecutada fue: SELECT COUNT (DISTINCT
t
id
.) FROMtrx_evaluation_details
t
IZQUIERDA OUTER JOINtrx_evaluation
eval
ON (t
eval_id
=eval
.id
) WHERE ((project.project_name LIKE: ycp0)
¿Qué pasa con mi código? Intenté conectar el modelo RmProject en mi modelo actual para poder acceder al nombre del proyecto ... pero, en cambio, recibo este error. Por favor ayuda..
Esta es una edición:
Esta es toda mi parte de relaciones
public function relations() {
return array(
''eval'' => array(self::BELONGS_TO, ''Evaluation'', ''eval_id''),
''project'' => array(self::BELONGS_TO, ''RmProjects'', ''project_id''),
);
}
He agregado esto en mi modelo pero todavía no funcionó. simplemente cambió la mesa.
$criteria->with = array(''project'' => array(''together'' => true));
$criteria->addSearchCondition(''project.project_name'', $search);
esta es mi función de búsqueda.
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,
));
}
No agregó el modelo a su método de búsqueda
$criteria->together = true;
$criteria->with = array(''eval'',''project'');
$criteria->addSearchCondition(''project.project_name'', $search);
Además, no es una buena solución para establecer el valor de búsqueda a través de los atributos del método. Defina un nuevo atributo público modelo, defina una regla y úselo en la búsqueda.
public $project_name;
public function attributeLabels(){
return array(
//... your other labels there
''project_name'' => ''Project Name'',
);
}
public function rules(){
return array(
//... your other rules there
array(''project_name'', ''safe'', ''on'' => ''search''),
);
}
public function search(){
$criteria->compare(''project.project_name'', $this->project_name);
}