【问题标题】:CakePHP3 - Reflexive relation and finderCakePHP3 - 自反关系和查找器
【发布时间】: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


    【解决方案1】:

    这有帮助吗?

    $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']
                ],
        ],
    ]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      • 2011-10-23
      • 2012-11-15
      相关资源
      最近更新 更多