sql >> Database >  >> RDS >> Mysql

Bijwerken en verwijderen van gerelateerde modellen (relatietabellen) in Yii

BIJWERKEN

Het lijkt erop dat je alleen een één-op-één relatie hebt, dus als dat het geval is, hoef je alleen maar $q te linken aan de specifieke kwalificatie:

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

Met enkele aanpassingen, zoals een lus en gegevensinvoer in tabelvorm de bovenstaande code kan werken voor één-op-veel.

VERWIJDEREN

Voor verwijdering bewerk Candidate::beforeDelete() om alle daaraan gekoppelde kwalificaties als volgt te verwijderen:

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

U moet de aanroep naar Candidate::delete() . afronden in een transactie.




  1. Hoe kan ik MySQL-laadfout corrigeren?

  2. Wanneer u NetBeans gebruikt om PHP-scripts te debuggen om tabelrecords te wijzigen, verandert 'affected_rows' van 1 in -1

  3. Laravel valideert uniek als id hetzelfde is

  4. hoe om te gaan met een grote updatequery in mysql met laravel