我有videos
和artists
,视频belongsTo
艺术家和艺术家hasMany
视频。
我做了并且正在工作,当我找到videos
并设置[contain => ['Artists']
时,我获得了相关艺术家的结果视频实体。
这第一个关系是关于作为"所有者的艺术家"视频,但我需要另一种关系,因为一个视频可能有N
其他艺术家"特色"视频。
这是一个更好的概述:
表格
视频 ID(pk),artist_id(fk)
artists_videos: video_Id(pk),artist_id(pk)
艺术家: id(pk)
-
继承代码:
//VideosTable
$this->BelongsTo('Artists');
$this->belongsToMany('Artists');
//ArtistsTable
$this->hasMany('Videos');
$this->belongsToMany('Videos');
问题是,当我设置第二个关系时,第一个关系停止工作,我认为发生了某种冲突。
答案 0 :(得分:1)
您需要使用不同的名称来调用这些关联:
$this->belongsTo('Comments', [
'className' => 'Comments',
...
]);
$this->hasMany('UnapprovedComments', [
'className' => 'Comments',
...
]);
...所以他们被ORM视为单独的实例。
答案 1 :(得分:0)
您可以尝试此操作,因为您定义了“视频” belongsToMany “艺术家”[ 根据您的表格< / em> ]和艺术家 hasMany 视频
在视频表格中
$this->belongsTo('Artists', [
'foreignKey' => 'artist_id'
]);
$this->belongsToMany('Artists', [
'foreignKey' => 'video_id',
'targetForeignKey' => 'artist_id',
'joinTable' => 'artists_videos'
]);
在艺术家表中:
$this->hasMany('Videos', [
'foreignKey' => 'artist_id'
]);
$this->belongsToMany('Videos', [
'foreignKey' => 'artist_id',
'targetForeignKey' => 'video_id',
'joinTable' => 'artists_videos'
]);
您可以查看CakePHP Examples
上的示例然后尝试CakeDoc
$this->hasMany('Comments', [
'className' => 'Comments',
'conditions' => ['approved' => true]
]);
$this->hasMany('UnapprovedComments', [
'className' => 'Comments',
'conditions' => ['approved' => false],
'propertyName' => 'unnaproved_comments'
]);