CakePHP3-自反关系与发现者

CakePHP3-自反关系与发现者,cakephp,orm,cakephp-3.0,finder,Cakephp,Orm,Cakephp 3.0,Finder,我开始用CakePHP3开发一个新网站,我被一段关系困住了 给定实体Movies和联接表MoviesMovies。每部电影都与其他电影相关,但在关系中没有方向 对于CakePHP2,我在关系定义中使用了属性finderQuery: public $hasAndBelongsToMany = array( 'Movies' => array( 'finderQuery' => 'SELECT movies.* FROM movies JOIN movies_mo

我开始用CakePHP3开发一个新网站,我被一段关系困住了

给定实体Movies和联接表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$}没有等价物:

我这样做对吗?您如何编写这个自定义查找程序

PS:CakePHP2的问题就在这里

这有帮助吗

$this->belongsToMany('RelatedMovies', [
    'className' => 'Movies',
    'through' => 'movies_movies',
    'conditions' => [
         'OR' => [
                'AND' =>['MoviesMovies.movie_1_id = RelatedMovies.id', 'MoviesMovies.movie_2_id = Movies.id'],
                'AND' => ['MoviesMovies.movie_2_id = RelatedMovies.id', 'MoviesMovies.movie_1_id = Movies.id']
            ],
    ],
]);
$this->belongsToMany('RelatedMovies', [
    'className' => 'Movies',
    'through' => 'movies_movies',
    'conditions' => [
         'OR' => [
                'AND' =>['MoviesMovies.movie_1_id = RelatedMovies.id', 'MoviesMovies.movie_2_id = Movies.id'],
                'AND' => ['MoviesMovies.movie_2_id = RelatedMovies.id', 'MoviesMovies.movie_1_id = Movies.id']
            ],
    ],
]);