CakePHP与非常规数据库的关联

CakePHP与非常规数据库的关联,cakephp,associations,database-relations,Cakephp,Associations,Database Relations,我们正在转换一个应用程序,以便与CakePHP 2.0.3一起使用。 出于某种原因,我似乎无法在我的模型之间建立适当的关系 下面是一个例子: 用户(id、petid、国家/地区、picid等) Pet(id、用户id、picid等) 图片(id、相册id等) 相册(id、用户id、小id等) 其含义如下: -一个用户可以有多个宠物,但同时只能选择一个宠物(因此,用户中的宠物) -宠物属于一个用户 -宠物和用户可以有多张图片,但只有一张个人资料图片,因此Pet.picid和User.picid

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

下面是一个例子:

  • 用户(id、petid、国家/地区、picid等)
  • Pet(id、用户id、picid等)
  • 图片(id、相册id等)
  • 相册(id、用户id、小id等)
其含义如下: -一个用户可以有多个宠物,但同时只能选择一个宠物(因此,用户中的宠物)

-宠物属于一个用户

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

我用CakePHP建立了我的模型,但我无法确定它们之间要使用哪些关系,因为数据库没有遵循约定。 我尝试了以下方法:

  • 用户
    ->有很多(宠物)
    ->哈桑(图片)
    ->哈斯曼(专辑)

  • 宠物
    ->belongsTo(用户)(使用foreignkey用户ID可以正常工作)
    ->哈斯曼(专辑)
    ->哈桑(图片)

  • 相册
    ->有很多(图片)

——实现这一目标的逻辑?它属于用户或宠物------

->belongsTo(用户)
->belongsTo(宠物)

  • 图片
    ->贝朗斯托(专辑)
我是CakePHP新手,不知道该怎么走。 你有什么建议吗

我建议您在人际关系中使用,这将有助于您了解返回的数据

例如,您的用户模型可以在其关联中使用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
    )
);
您的宠物模型也可以使用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
    )
);
…最后是您的相册型号:

/**
 * 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
    )
);
关于属于用户宠物相册的逻辑,您可以在保存数据或返回数据时在控制器中处理该逻辑。即用户优先于宠物

我希望这有帮助