0

http://kohanaframework.org/3.2/guide/orm/relationshipsによる

2 つのモデルがあるとします。with 1 User : Many Posts 関係。選択したユーザーのすべての投稿を削除するにはどうすればよいですか?

モデル_ユーザー

    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

さて、私はこれが以前は機能していたことを知りました。コハナ3.2ではもうありません...

ORM::factory('posts')->where('user_id','=','1')->delete_all();

これは、私が望んでいたものにORMを使用するのに最も近い方法です。

Model_Postに自分のdelete_allを追加することにしました。だから私はこれを行うことができます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

remove 関数で同じ問題に遭遇しました。これは _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 に答える