2015-05-15 2 views
2

У меня есть videos и artists, видео belongsTo художник и художник hasMany видео.Две ассоциации за тот же стол, что привело к столкновению

Я сделал это и работает, когда найду videos и установил [contain => ['Artists'] У меня есть результат с объектом, связанным с художником.

Это первое отношение к художнику, которое является «владельцем» видео, но мне нужны другие отношения, потому что у видео может быть N других художников, «показывающих» видео.

Heres лучший обзор:

Таблицы:

видео: ID (рк), artist_id (Fk)

artists_videos: Video_id (рк), artist_id (рк)

исполнителей: ID (pk)

-

Heres код:

//VideosTable 
$this->BelongsTo('Artists'); 
$this->belongsToMany('Artists'); 

//ArtistsTable 
$this->hasMany('Videos'); 
$this->belongsToMany('Videos'); 

Вопрос в том, когда я установил эту вторую связь первые отношения останавливается на работу, я думаю, что происходит какое-то столкновение.

ответ

1

Вы должны вызвать эти ассоциации с разными названиями:

$this->belongsTo('Comments', [ 
      'className' => 'Comments', 
      ... 
     ]); 

$this->hasMany('UnapprovedComments', [ 
      'className' => 'Comments', 
      ... 
     ]); 

... поэтому они обрабатывают ОРМ в виде отдельных экземпляров.

0

Вы можете попробовать это, так как вы определили "видео" belongsToMany "художников" [В соответствии с вашими таблицами] и художников 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' 
    ]);