親テーブルのレコードが削除されたときに子テーブルにparent_id=NULLを設定するにはどうすればよいですか?
これは、MySQLINNODBテーブルのONDELETE = SET NULLに似ていますが、INNODBレベルでこれらすべての機能(カスケード、無視、更新、nullの設定)を使用することを避け、atk4モデルに移動して、これらすべてをロジック1か所に保持したいと思います。
例えば、
class Model_Parent extends Model_Table{
public $table='parent';
function init(){
parent::init();
$this->addField('name');
$this->hasMany('Child');
$this->addHook('beforeDelete',$this);
}
function beforeDelete($m){
// I guess here I should somehow set parent_id=NULL in all related Model_Child
// records, but when I do so, then it's again DB constraint violation of course
$c = $m->ref('Child');
foreach($c as $junk){
$c->set('parent_id',NULL); // this and below is not working
$c->save();
}
}
}
class Model_Child extends Model_Table{
public $table='child';
function init(){
parent::init();
$this->addField('name');
$this->hasOne('Parent');
}
}