【发布时间】:2015-05-26 22:24:07
【问题描述】:
我已经开始使用 CakePHP3 开发一个新网站,但我遇到了关系。
给定实体 Movies 和 Join Table MoviesMovies。每部电影都与其他电影相关,但在关系中没有方向。
使用 CakePHP2,我在关系定义中使用了属性 finderQuery:
public $hasAndBelongsToMany = array(
'Movies' => array(
'finderQuery' => 'SELECT movies.* FROM movies JOIN movies_movies ON (movies_movies.movie_1_id = movies.id AND movies_movies.movie_2_id = {$__cakeID__$}) OR (movies_movies.movie_2_id = movies.id AND movies_movies.movie_1_id = {$__cakeID__$})'
)
);
我尝试使用 finder 属性在 CakePHP3 中重现此行为,但它不起作用,并且 {$cakeID$}:
$this->belongsToMany('Movies', [
'finder' => 'relations'
]);
public function findRelations(Query $query, array $options){
$query->join([
'mm' => [
'table' => 'movies_movies',
'type' => 'INNER',
'conditions' => [
'OR' => [
'AND' => ['mm.movie_1_id = movies.id', 'mm.movie_2_id = {$__cakeID__$}'],
'AND' => ['mm.movie_2_id = movies.id', 'mm.movie_1_id = {$__cakeID__$}']
],
]
]
]);
return $query;
}
我做对了吗?以及如何编写这个自定义查找器?
PS : CakePHP2 的问题在这里Reflexive many-to-many relationship in CakePHP
【问题讨论】:
标签: cakephp orm cakephp-3.0 finder