Cakephpで隣接するデータを取得
Cakephpでは、find allのほかにも複数のオプションがあり、その中でおすすめなのが、neighborsとthreadedオプション。
neighborsでは、valueに指定した値の行の前後の行を
prev
next
というデータ構造で返してくれます。find all同様conditionsを定義できます。
$neighbors = $this->Product->find('neighbors', array( 'field' => 'id', 'value' => $id, 'conditions'=>array( 'and' => array( 'Product.email' => $email, 'or' => array( array('Product.status' => 1), array('Product.status' => 3), ) ) ) ) );
上の例はProductモデルのidフィールドをvalueで対象となる行を割り出し、その前後の行を返します。メールアドレスやProductのstatusの値によって対象となる行を絞り込むためのconditionsが設定可能です。
neighborsの使いどころとして、ブログサービスを例にすると
前の記事
次の記事
といったリンクを構築する際に利用できます。