2015-05-26 117 views
3

我正在将我的应用转换为cakephp 3.0,并且我无法找到在find方法中使用邻居的替代方法。Cakephp中是否有邻居的替代方案

我需要找到关联表中的下一条记录,邻居是一个很好的方式来做到这一点。

//Open courses 
$options = [ 
    'conditions' => ['Employees.user_id' => 1, 'CoursesEmployees.completed' => false], 
    'limit' => 3, 
    'contain' => 'Employees' 
]; 
$recentOpen = $this->CoursesEmployees->find('all', $options)->toArray(); 

// get next module for each open course 
foreach ($recentOpen as $key => &$value) { 
    $currentModule = $value['CourseModule']['id']; 
    $neighbors = $this->CoursesEmployees->CourseModules->find(
     'neighbors', 
     ['field' => 'id', 'value' => $currentModule] 
    ); 
    $value['CourseModule']['next_module'] = $neighbors['next']['CourseModule']['name']; 
}; 

与代码的另一个问题,我发现是$this->CoursesEmployees->find('all', $options)->toArray();仿佛回到一切CakePHP中使用复杂的阵列来查询表,而不是实际结果就像我使用CakePHP 2.获得我加入了->toArray()与建议3.0

回答

0

正如所解释的here 没有邻居的CakePHP 3

找到方法,但如果你按照问题的流程,你会发现一个自定义的取景器来完成它,也许它会为你工作。

+0

谢谢,我会寻找建立我自己的发现者的方法。至少它我知道没有替代它。羞愧是有用的,看不出有理由放弃它。如果我没有从'$ this-> CoursesEmployees-> find('all',$ options) - > toArray()获得结果,你会有什么想法吗?'Cakephp 3在这个阶段似乎没有做这个查询有没有结果,不像2.0 –

+0

我不知道最后一个问题@KeithPower。事实上,我有一些同样的问题,但我围绕它。也许你可以尝试另一种方式来做到这一点? ( '$ query = $ articles-> find() - > – Tzaoh

4

因为我讨厌“答案”,简单地指向,你可能会或可能不会是今天能够破译半回答一个网址,但可以明天去,这是我更换自定义查找:

// In src/Models/Table/ExampleTable.php 
/** 
* Find neighbors method 
*/ 
public function findNeighbors(Query $query, array $options) { 
    $id = $options['id']; 
    $previous = $this->find() 
      ->select('id') 
      ->order(['id' => 'DESC']) 
      ->where(['id <' => $id]) 
      ->first(); 
    $next = $this->find() 
      ->select('id') 
      ->order(['id' => 'ASC']) 
      ->where(['id >' => $id]) 
      ->first(); 
    return ['prev' => $previous['id'], 'next' => $next['id']]; 
} 

简单地在控制器中调用:

// In src/Controller/ExamplesController.php 
public function view($id = null) { 
    ... 
    $neighbors = $this->Examples->find('neighbors', ['id' => $id]); 
    .... 
} 
相关问题