基于http://kohanaframework.org/3.2/guide/orm/relationships
假设我有2个型号; 1个用户:很多帖子关系。如何删除所选用户的所有帖子?
Model_User
protected $_has_many = array('posts' => array());
Model_Post
protected $_belongs_to = array(
'user' => array(
'foreign_key' => 'author_id',
),
);
我尝试了$user->posts->delete()
,但它不起作用。
修改
只想添加remove()
实际上不适用于此情况,只能用于has_many 'through'
关系。
* @param string $alias Alias of the has_many "through" relationship
* @param mixed $far_keys Related model, primary key, or an array of primary keys
* @return ORM
*/
public function remove($alias, $far_keys = NULL)
ORM /类/ Kohana的/ orm.php
答案 0 :(得分:1)
您可以尝试$user->remove('posts');
答案 1 :(得分:0)
嗯,我发现这曾经有用。不再是Kohana 3.2 ...
ORM::factory('posts')->where('user_id','=','1')->delete_all();
这是我能用到ORM的最接近的地方。
我决定将自己的delete_all添加到Model_Post中。所以我可以这样做ORM::factory('posts')->delete_all($user_id)
public function delete_all($author_id){
DB::delete('posts')
->where('author_id','=',$author_id)
->execute();
}
答案 2 :(得分:0)
我刚刚遇到了与删除函数相同的问题,它只是没有与_has_many关系一起使用,仅用于has_many通过,但它可以很容易修复,我扩展了ORM模型并使用了以下函数代替:
public function remove($alias, $far_keys = NULL)
{
$far_keys = ($far_keys instanceof ORM) ? $far_keys->pk() : $far_keys;
if(NULL !== $this->_has_many[$alias]['through'])
{
$table_name = $this->_has_many[$alias]['through'];
}
else
{
$table_name = ORM::factory($this->_has_many[$alias]['model'])->table_name();
}
$query = DB::delete($table_name)
->where($this->_has_many[$alias]['foreign_key'], '=', $this->pk());
if ($far_keys !== NULL)
{
// Remove all the relationships in the array
$query->where($this->_has_many[$alias]['far_key'], 'IN', (array) $far_keys);
}
$query->execute($this->_db);
return $this;
}