2015-04-20 72 views
5

我有表学期,学科和jointTable Semesters_Disciplines。我希望在DisciplinesController中创建一个以semester_id作为参数的动作索引,该参数列表只包含与参数中传递的id相关的学期属性。我尝试这样做:分段条件belongsToMany CakePHP 3

public function index($semester_id) 
{ 
    $options = ['semester_id' => $semester_id]; 
    $this->paginate = ['conditions' => $options]; 

    $this->set('disciplines', $this->paginate($this->Disciplines)); 
    $this->set('_serialize', ['disciplines']); 
} 
+0

你对测试的结果,并发生了什么,你是或者没有想到? – Milner

+0

错误:SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'semesters_id' 呃...'条件'只是接受与控制器模型有关的条件... – Luiz

回答

15

你将不得不使用使用匹配或连接到能够在非1:1/n-1协会筛选查询。

您可以通过这样做的直接传递查询到paginate()方法

// ... 
$this->set('disciplines', $this->paginate(
    $this->Disciplines 
     ->find() 
     ->matching('Semesters', function(\Cake\ORM\Query $q) use ($semester_id) { 
      return $q->where([ 
       'Semesters.id' => $semester_id 
      ]); 
     }) 
     ->group(['Disciplines.id']) 
)); 
// ... 

,或者通过使用自定义查找。

// ... 
$this->paginate = [ 
    'finder' => [ 
     'semesters' => [ 
      'semester_id' => $semester_id 
     ] 
    ] 
]; 
$this->set('disciplines', $this->paginate($this->Disciplines)); 
// ... 
// DisciplinesTable 
public function findSemesters(\Cake\ORM\Query $query, array $options) 
{ 
    $query 
     ->matching('Semesters', function(\Cake\ORM\Query $q) use ($options) { 
      return $q->where([ 
       'Semesters.id' => $options['semester_id'] 
      ]); 
     }) 
     ->group(['Disciplines.id']); 
    return $query; 
} 

参见

+0

我解决了第一个选项的问题! TY – Luiz