我们正在转换一个与CakePHP 2.0.3一起使用的应用程序。 出于某种原因,我似乎无法在我的模型之间建立适当的关系。
以下是一个例子:
这些含义如下:
- 用户可以拥有多只宠物,但只能同时选择一只宠物(因此,用户使用petid)
- 宠物属于一个用户
- 宠物和用户可以有多张图片,但只有一张个人资料图片,因此Pet.picid和User.picid
- 宠物和用户可以有多个专辑
我在CakePHP中设置了我的模型,但我无法弄清楚它们之间使用哪些关系,因为数据库没有遵循约定。 我尝试了以下内容:
用户
- >的hasMany(宠物)
- > hasOne(图)
- >的hasMany(专辑)
宠物
- > belongsTo(用户)(工作正常,使用foreignkey userid)
- >的hasMany(专辑)
- > hasOne(图片)
相册
- >的hasMany(图片)
----逻辑实现这一目标?它要么属于用户,要么属于宠物-----
- >属于关联(用户)
- >属于关联(PET)
我是CakePHP的新手,无法想办法走到这里。 你有什么建议吗?
答案 0 :(得分:0)
我建议您在关系中使用Aliases,以帮助您了解返回的数据。
例如,您的用户模型可以在其关联中使用 SelectedPet 和 ProfilePicture :
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
)
);
关于属于用户或宠物的相册的逻辑,您可以在保存时在控制器中处理此问题数据或返回它。 I.e用户优先于宠物。
我希望这会有所帮助。