1

Datamapper でリレーションシップを設計する場合、リレーションシップを関連オブジェクトと同じ名前で呼ぶ必要がありますApplication_Model_User。クラス名のようなものがある場合、これはあまり便利ではありません。「クラス」キーを使用した構成オプションがあると急いで言う人のために、私は知っています。そこに行ってみました。関連するオブジェクトを取得する場合にのみ機能し、更新する場合には機能しません。

問題を再現するためのコード スニペットを次に示します。

// User Model
class UserModel extends Datamapper
{
    public $table = 'users';
    public $has_many = array(
        'roles' => array(
            'class' => 'RoleModel',
            'other_field' => 'usermodel',
            'join_other_as' => 'role',
            'join_self_as' => 'user',
            'join_table' => 'users_roles' 
        ),
    );
}

class RoleModel extends DataMapper
{
    public $table = 'roles';
    public $has_many = array(
        'usermodel' => array('class'        => 'UserModel',
                         'other_field'  => 'roles',
                         'join_other_as'=> 'user',
                         'join_self_as' => 'role',
                         'join_table'   => 'users_roles' )
    );
}

// controller code. Make sure you have a role with INT id = 2, and a user with INT id = 5 in your db
$user = new UserModel(2);
$role = new RoleModel(5);
$user->save($role);

このコードは、「usermodel を rolemodel と関連付けることができません」というメッセージを表示します。user_rolesエラーですが、リレーションの名前が「ロール」から「ロールモデル」に変更された場合、正しく機能します (結合テーブルに新しいレコードが挿入されることを意味します)。

したがって、CI の Datamapper の熱心なユーザーが助けになる場合は、関係を適切に定義する方法を教えてください。

4

1 に答える 1

2

アップデート

リレーションシップ キーを使用して、オブジェクトをリレーションとして保存できます。

$object->save( $related, $relationship_key ). 

したがって、使用する必要があります

$user->save($role, "roles");

この Web ページの下部を参照してください: http://datamapper.wanwizard.eu/pages/save.html


他の誰かを助ける場合に備えて、このビットを残します。

関係にカスタム名を付けたいようです。(それは私がすべての皮肉を通り抜けた後に得たものです) -

リレーションシップ配列のキーを使用して、リレーションシップに任意の名前を付けることができます。したがって、次のスニペットではbook< を使用します。これは、クラスと同じ名前である必要はありません。これがclassキーの目的です。

class Author extends DataMapper {
  $has_many = array(
    'book' => array(  // YOU USE THIS KEY TO NAME THE RELATIONSHIP
        'class' => 'book',
        'other_field' => 'author',
        'join_self_as' => 'author',
        'join_other_as' => 'book',
        'join_table' => 'authors_books'
     )
  );
}

これがうまくいかない場合は、人間関係の設定に何か他の問題があると思います.

http://datamapper.wanwizard.eu/pages/advancedrelations.html

于 2012-01-03T14:47:42.683 に答える