0

基于http://kohanaframework.org/3.2/guide/orm/relationships

假设我有 2 个模型;有 1 个用户:许多帖子关系。如何删除选定用户的所有帖子?

模型_用户

    protected $_has_many = array('posts' => array());

模型_帖子

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/classes/kohana/orm.php

4

3 回答 3

1

你可以试试$user->remove('posts');

于 2012-05-22T04:34:46.130 回答
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();
}
于 2012-05-22T06:55:53.397 回答
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;
}
于 2015-02-17T15:39:20.030 回答