metadaten - php get page title



Yii-Wie man Daten von einem anderen Modell erhält (2)

Guten Morgen

Wie bekomme ich Daten von einem anderen Modell? Ich habe ein Suchfeld, wo ich einen Projektnamen suchen muss. dann zeigt mein Cgridview die ausgewählten Projekte an.

Ich habe das in meinen Beziehungen

public function relations() {
        return array(
            'project' => array(self::BELONGS_TO, 'RmProjects', 'project_id'),
        );
    }

Ich habe versucht, auf project_name in der Suchfunktion in meinem Modell zuzugreifen.

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,
        ));
    }

Wenn ich das mache, erhalte ich einen Fehler.

CDbCommand konnte die SQL-Anweisung nicht ausführen: SQLSTATE [42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte 'project.project_name' in 'where-Klausel'. Die ausgeführte SQL-Anweisung war: SELECT COUNT (DISTINCT t . id ) FROM trx_evaluation_details t LINKE OUTER JOIN trx_evaluation eval EIN ( t . eval_id = eval . id ) WHERE ((project.project_name LIKE: ycp0)

Was ist falsch an meinem Code? Ich habe versucht, das RmProject-Modell in meinem aktuellen Modell zu verbinden, damit ich auf den Projektnamen zugreifen kann. Stattdessen erhalte ich diesen Fehler. Bitte helfen Sie ..

Dies ist eine Bearbeitung:

Das ist mein ganzer Beziehungsteil

 public function relations() {
        return array(
            'eval' => array(self::BELONGS_TO, 'Evaluation', 'eval_id'),
            'project' => array(self::BELONGS_TO, 'RmProjects', 'project_id'),
        );
    }

Ich habe dies in meinem Modell hinzugefügt, aber es hat immer noch nicht funktioniert. Es hat nur den Tisch gewechselt.

$criteria->with = array('project' => array('together' => true));     
$criteria->addSearchCondition('project.project_name', $search);

Das ist meine Suchfunktion.

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,
        ));
    }


Answer #1

Sie haben Ihrer Suchmethode kein Modell hinzugefügt

$criteria->together = true;
$criteria->with = array('eval','project');
$criteria->addSearchCondition('project.project_name', $search);

Es ist auch keine gute Lösung, den Suchwert über die Attribute der Methode festzulegen. Definieren Sie ein neues öffentliches Attribut des Modells, definieren Sie eine Regel und verwenden Sie sie in der Suche.

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);
}

Answer #2

Ich habe dieses Problem gelöst.

In meinen Beziehungen () habe ich diese Zeile hinzugefügt

'project' => array(self::HAS_ONE, 'RmProjects', array ('project_id'=>'project_id'), 'through'=> 'eval'),

Dies verbindet die Modelle mit einer Verbindung, die ein anderes Modell durchläuft. und dann können Sie die Daten von einem anderen Modell erhalten .. ich hoffe, dass diese Antwort jedem helfen kann, der die gleiche Frage wie ich hat.

Sie können es hier lesen .. was ist in relationalen Abfrage über http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-with-through





yii