1

アプリケーションを CakePHP 2.0.3 で使用できるように変換しています。何らかの理由で、モデル間に適切な関係を設定できないようです。

次に例を示します。

  • ユーザー (id、petid、country、picid、...)
  • ペット (id、userid、picid、...)
  • 画像 (id、albumid、....)
  • アルバム (id、userid、petid、...)

これらの意味は次のとおりです。 - ユーザーは複数のペットを持つことができますが、同時に選択できるペットは 1 つだけです (したがって、User の petid)

- ペットは 1 人のユーザーに属します

- ペットとユーザーは複数の写真を持つことができますが、プロフィール写真は 1 つだけなので、Pet.picid と User.picid

- ペットとユーザーは複数のアルバムを持つことができます

CakePHP でモデルをセットアップしましたが、データベースが規則に従っていないため、それらの間でどの関係を使用すればよいかわかりません。私は次のことを試しました:

  • ユーザー
    -> hasMany(ペット)
    -> hasOne(写真)
    -> hasMany(アルバム)

  • Pet
    -> belongsTo(User) (foreignkey ユーザー ID で正常に動作)
    -> hasMany(Album)
    -> hasOne(Picture)

  • アルバム
    -> hasMany(写真)

---- これを達成するためのロジックは? ユーザーまたはペットのいずれかに属します-----

-> 所属先 (ユーザー)
-> 所属先 (ペット)

  • 写真
    -> 所属先(アルバム)

私は CakePHP が初めてで、ここに行く方法がわかりません。何か提案はありますか?

4

1 に答える 1

0

リレーションシップでエイリアスを使用することをお勧めします。これにより、返されるデータを理解するのに役立ちます。

たとえば、Userモデルは、その関連付けでSelectedPetProfilePictureを使用できます。

User.php モデル

/**
* belongsTo associations
*
* @var array
*/
public $belongsTo = array(
    'SelectedPet' => array(
        'className' => 'Pet',
        'foreignKey' => 'petid'
    ),
    'ProfilePicture' => array(
        'className' => 'Picture',
        'foreignKey' => 'picid',
    )
);

/**
* hasMany associations
*
* @var array
*/
public $hasMany = array(
    'Album' => array(
        'className' => 'Album',
        'foreignKey' => 'userid',
        'dependent' => false
    ),
    'Pet' => array(
        'className' => 'Pet',
        'foreignKey' => 'userid',
        'dependent' => false
    )
);

Petモデルでも ProfilePicture を使用できます

/**
 * belongsTo associations
 *
 * @var array
 */
    public $belongsTo = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'userid'
        ),
        'ProfilePicture' => array(
            'className' => 'Picture',
            'foreignKey' => 'picid'
        )
    );

/**
 * hasMany associations
 *
 * @var array
 */
    public $hasMany = array(
        'Album' => array(
            'className' => 'Album',
            'foreignKey' => 'petid',
            'dependent' => false
        )
    );

画像モデル:

/**
 * belongsTo associations
 *
 * @var array
 */
    public $belongsTo = array(
        'Album' => array(
            'className' => 'Album',
            'foreignKey' => 'albumid'
        )
    );

..そして最後にあなたのアルバムモデル:

/**
 * belongsTo associations
 *
 * @var array
 */
public $belongsTo = array(
    'User' => array(
        'className' => 'User',
        'foreignKey' => 'userid'
    ),
    'Pet' => array(
        'className' => 'Pet',
        'foreignKey' => 'petid'
    )
);

/**
 * hasMany associations
 *
 * @var array
 */
public $hasMany = array(
    'Picture' => array(
        'className' => 'Picture',
        'foreignKey' => 'albumid',
        'dependent' => false
    )
);

UserまたはPetに属するAlbumのロジックに関しては、データを保存または返すときにコントローラーでこれを処理できます。つまり、ユーザーはペットよりも優先されます。

これが役立つことを願っています。

于 2011-11-19T11:22:18.250 に答える