こんちには、フリーのITエンジニアでWeb(PHP:Laravel)のバッグエンドをメインにフルリモートでお仕事させて頂きながら、個人開発でiOSアプリを作っているMoritaです。
Model::find()でjoinする場合、ページネーションを実装するのが困難になります。
ページネーションとjoinを組み合わせるためには、paginateプロパティでjoinを設定していきましょう。
Model::find()のなにがダメ?
以下のソースでページネーションを実行しても取得できるのArticleテーブルのデータだけで、Commentsテーブルの値は取れません。
$query = $articles->find()
->join([
'table' => 'comments',
'alias' => 'c',
'type' => 'LEFT',
'conditions' => 'c.article_id = articles.id',
]);
// これだとcommentテーブルの値は取れません。
$this->set('article', $this->paginate());
どうすればいいんだ?
paginateプロパティのjoinで取れます。
// ArticleControllerのpaginateプロパティ
// 対応したModelはArticleになります。
$this->paginate = array(
'join' => array(
'type' => 'left',
'tabel' => 'comment',
'conditions' => array(
'comment.id = article.id',
)
)
);
まとめ
ページネーションを使用する場合、コントローラのpaginateプロパティのjoin で実装しましょう。
コメント