同一个表的两个关联导致冲突

时间:2015-05-15 13:00:36

标签: php cakephp-3.0

我有videosartists,视频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');

问题是,当我设置第二个关系时,第一个关系停止工作,我认为发生了某种冲突。

2 个答案:

答案 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'
    ]);