我有两张桌子。一个是类别,该类别有多个提名。
表类别
protected static $_has_many = array(
'nominations' => array(
'key_from' => 'id',
'key_to' => 'category_id',
'model_to' => 'Model_Nominations',
'cascade_save' => true,
'cascade_delete'=> true
)
);
表格提名
protected static $_belongs_to = array(
'categories' => array(
'key_from' => 'category_id',
'key_to' => 'id',
'model_to' => 'Model_Categories',
'cascade_save' => true,
'cascade_delete'=> true
)
);
当我删除类别时:
public static function delete_($args)
{
$q = Model_Categories::query()
->where('id','=',$args['id']);
if($q->count() > 0){
$q->delete();
return true;
}
return false;
}
即使cascade_delete
设置为true,它也不会删除提名表中的提名条目。我错过了什么?
答案 0 :(得分:2)
你的逻辑错了。
在您的示例中,$q
是一个ORM查询对象,因此删除只会运行删除查询:DELETE FROM categories WHERE id = ?
。
如果要删除对象及其关系,则需要使用它的关系获取模型对象。它不会级联到未加载的关系中。
public static function delete_($args)
{
if ($result = Model_Categories::find($args['id'], array('related'=>array('nominations')))
{
return $result->delete();
}
return false;
}