sql >> Databáze >  >> RDS >> Mysql

Aktualizace a odstranění souvisejících modelů (relačních tabulek) v Yii

AKTUALIZACE

Zdá se, že máte vztah pouze jedna ku jedné, takže pokud je tomu tak, musíte propojit pouze $q ke konkrétní kvalifikaci:

public function actionUpdate()
   {
    //load model
    $q=&$model->qualifications[0];
    if (isset($_POST['Candidate'], $_POST['Qualification'])) {
        $model->attributes=$_POST['Candidate'];
        $q->attributes=$_POST['Qualification'];

        $error = false;
        $transaction = Yii::app()->db->beginTransaction();
        try {
            if (!$model->save()) {
                throw new CException(CHtml::errorSummary($model));
            }
            if (!$q->save()) {
                throw new CException(CHtml::errorSummary($q));
                echo $error;
            }
            $transaction->commit();
        } catch (Exception $e) {
            $transaction->rollBack();
            $error = $e->getMessage();
        }

        if (!$error) {
            $this->redirect(array('view','id'=>$model->id));
        }
    }

S některými vylepšeními, např. smyčkou a tabulkový vstup dat výše uvedený kód může fungovat pro jeden k mnoha.

SMAZÁNÍ

Pro smazání upravte Candidate::beforeDelete() odstranit všechny kvalifikace, které jsou s ním spojeny, následovně:

public function beforeDelete(){
    foreach($this->qualifications as $q)
        $q->delete();
    return parent::beforeDelete();
}

Měli byste zabalit volání Candidate::delete() v transakci.




  1. Oracle na PostgreSQL:ZAČNĚTE S / PŘIPOJTE SE

  2. Práce s velkým množstvím dat z mysql

  3. Získejte a nastavte proměnnou připojení k databázovému serveru pomocí JDBC

  4. Jak změnit formát data v Oracle Session