1

我们正在转换一个应用程序以与 CakePHP 2.0.3 一起使用。出于某种原因,我似乎无法在我的模型之间设置适当的关系。

这是一个例子:

  • 用户(id,petid,国家,picid,...)
  • 宠物(id、userid、picid、...)
  • 图片(id,白蛋白,....)
  • 专辑(id,userid,petid,...)

它们的含义如下: - 一个用户可以拥有多只宠物,但同时只能选择一只宠物(因此,用户中的petid)

- 宠物属于一个用户

- 宠物和用户可以拥有多张图片,但只有一张个人资料图片,因此 Pet.picid 和 User.picid

- 宠物和用户可以拥有多个相册

我在 CakePHP 中设置了我的模型,但由于数据库不遵循约定,我无法弄清楚它们之间要使用哪些关系。我尝试了以下方法:

  • 用户
    -> hasMany(宠物)
    -> hasOne(图片)
    -> hasMany(相册)

  • Pet
    -> belongsTo(User) (工作正常,使用外键用户 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
    )
);

关于属于UserPet的Album的逻辑,您可以在保存数据或返回数据时在控制器中处理它。即用户优先于宠物。

我希望这有帮助。

于 2011-11-19T11:22:18.250 回答