相同 table 的两个关联导致冲突

Two associations for the same table resulting in a collision

我有 videosartists、视频 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 视为单独的实例。

你可以试试这个,因为你定义了“videosbelongsToManyartists”[ 根据您的 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'
    ]);