Dato che oramai sta cosa di impedire la cancellazione dei record la sto facendo in tutte le liste …
… stavo pensando se era il caso, invece di modificare la actionDelete, di eseguire un override della CActiveRecord->delete(), copia/incollando il sorgente attuale della delete e facendogli fare isActive=0 e save() invece del delete fisico.
o ancora, se era meglio fare l’override del beforeDelete, copia/incollando il sorgente attuale, facendo isActive=0 e save() e restituendo false per impedire la cancellazione (ma questa cosa mi piace di meno)
public function delete()
{
$this->isActive=0;
$this->save();
return true;
}
public function deleteAll($condition, $params)
{
return $this->updateAll(array('isActive'=>1), $condition, $params);
}
Puoi farti una masterclass che estende CActiveRecord in modo da non dover ripetere il codice ovunque.
L’idea della ‘NotDeletableRecord’ che estende ‘CActiveRecord’ non è male, anzi.
Dove va posizionato questo php ?
Grazie per il suggerimento dell’override anche di deleteAll, tranne per l’1 che dev’essere zero
non è meglio che faccio la delete direttamente così ?
public function delete()
{
if(!$this->getIsNewRecord())
{
Yii::trace(get_class($this).'.delete()','system.db.ar.CActiveRecord');
if($this->beforeDelete())
{
$this->isActive=0;
$result = $this->save();
return $result;
}
else
return false;
}
else
throw new CDbException(Yii::t('yii','The active record cannot be deleted because it is new.'));
}