相同 table 的两个关联导致冲突
Two associations for the same table resulting in a collision
我有 videos
和 artists
、视频 belongsTo
艺术家和艺术家 hasMany
视频。
我做到了并且正在工作,当我找到 videos
并设置 [contain => ['Artists']
时,我得到了与相关艺术家相关的结果视频实体。
第一个关系是关于作为视频 "owner" 的艺术家的,但我需要另一个关系,因为一个视频可能有 N
其他艺术家 "featuring" 视频。
下面是更好的概述:
表格:
视频: 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');
问题是,当我设置第二个关系时,第一个关系停止工作,我认为发生了某种冲突。
您需要用不同的名称来调用这些协会:
$this->belongsTo('Comments', [
'className' => 'Comments',
...
]);
$this->hasMany('UnapprovedComments', [
'className' => 'Comments',
...
]);
...所以它们被 ORM 视为单独的实例。
你可以试试这个,因为你定义了“videos”belongsToMany“artists”[ 根据您的 Tables] 和艺术家 hasMany 个视频
在视频中 Table:
$this->belongsTo('Artists', [
'foreignKey' => 'artist_id'
]);
$this->belongsToMany('Artists', [
'foreignKey' => 'video_id',
'targetForeignKey' => 'artist_id',
'joinTable' => 'artists_videos'
]);
在艺术家中Table:
$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'
]);
我有 videos
和 artists
、视频 belongsTo
艺术家和艺术家 hasMany
视频。
我做到了并且正在工作,当我找到 videos
并设置 [contain => ['Artists']
时,我得到了与相关艺术家相关的结果视频实体。
第一个关系是关于作为视频 "owner" 的艺术家的,但我需要另一个关系,因为一个视频可能有 N
其他艺术家 "featuring" 视频。
下面是更好的概述:
表格:
视频: 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');
问题是,当我设置第二个关系时,第一个关系停止工作,我认为发生了某种冲突。
您需要用不同的名称来调用这些协会:
$this->belongsTo('Comments', [
'className' => 'Comments',
...
]);
$this->hasMany('UnapprovedComments', [
'className' => 'Comments',
...
]);
...所以它们被 ORM 视为单独的实例。
你可以试试这个,因为你定义了“videos”belongsToMany“artists”[ 根据您的 Tables] 和艺术家 hasMany 个视频
在视频中 Table:
$this->belongsTo('Artists', [
'foreignKey' => 'artist_id'
]);
$this->belongsToMany('Artists', [
'foreignKey' => 'video_id',
'targetForeignKey' => 'artist_id',
'joinTable' => 'artists_videos'
]);
在艺术家中Table:
$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'
]);