2015年10月23日金曜日

CakePHP 3で、ファインダーメソッド(Finder Method)

CakePHP 3で、ファインダーメソッド(Finder Method)の作成です。Ruby on Railsで言うところの「Scope」のようなものでしょうか。モデルに記述することで、コントローラー自体をシンプルに保つことができます。

src/Model/Table/BookmarksTable.php(モデル)
// コントローラーで「find('tagged')」として利用できる 
public function findTagged(Query $query, array $options)
{
  return $this->find()
    ->distinct(['Bookmarks.id'])
    ->matching('Tags', function ($q) use ($options) {
      return $q->where(['Tags.title IN' => $options['tags']]);
    });
}
src/Controller/BookmarksController.php(コントローラー)
public function tags()
{
  // BookmarksTableの「findTagged()メソッド」.
  $bookmarks = $this->Bookmarks->find('tagged', [
    'tags' => $tags
  ]);
}

http://localhost:8765/bookmarks/tagged/aaa/bbb/ccc
のようなURLでデータを取得できます。

実際に設定してみたサイトがこちら

参考サイト
クイックスタートガイド(CakePHP Cookbook 3.x ドキュメント)

0 件のコメント:

コメントを投稿