この記事の目次
chevron_right
やりたいこと
chevron_right
(1)containできない
chevron_right
(2)ページネーションのソートが効かない
chevron_right
参考
まじで情報なさすぎやろ!(ブチギレ
やりたいこと
以下、3つのテーブルがあったとします。
- articles(記事)テーブル
- authors(投稿者)テーブル
- page_views(記事閲覧数)テーブル
これら3つをjoinし、かつ、page_viewsテーブルのpv
カラムをsum
して取得したい。
(1)containできない
なんか、sumを使うと2つ以上のテーブルをcontain
でjoinしてくれなくなるらしい。
何やねんそれ。
脳死でjoinした。
$query = $this->Articles->query()
->contain([
'Authors',
])
->join([
'PageViews' => [
'table' => 'page_views',
'type' => 'LEFT OUTER',
'conditions' => [
'Articles.id = PageViews.article_id',
],
],
])
->group('Articles.id')
;
$query = $query->select([
'id' => 'Articles.id',
'title' => 'Articles.title',
'created_at' => 'Articles.created_at',
'author_id' => 'Articles.author_id',
'author_name' => 'Authors.name',
'pv' => $query->func()->sum('PageViews.pv'),
]);
$this->paginate($query);
(2)ページネーションのソートが効かない
<?= $this->Paginator->sort('title', 'タイトル', ['class' => 'link']); ?>
のようにすれば、文字がリンク化されて自動的にorderByしてくれる。。。
はずなのに!!!
してくれない!!!
答え。
$paginate
変数にsortableFields
を定義して突っ込む。
public $paginate = [
'order' => ['modified' => 'desc'],
'limit' => 30,
'sortableFields' => [ // これ!!!!!!!!!!!!
'id',
'title',
'created_at',
'author_id',
'author_name',
'pv',
],
];
いやー……Cake、嫌いになるわー
参考
この記事を書いた人
Nな人(えぬなひと)。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。