OctoberCMSのリスト画面で他テーブルのカラムを表示する

OctoberCMSのリスト画面では通常、設定ファイルで指定したモデル(テーブル)の情報を使うことができますが、複数モデルを指定したりはできません。
今回は、指定したモデルに他のテーブルを結合させて、他テーブルのカラムを表示する方法をご紹介します。

環境

  • Laravel:5.5
  • October CMS:1.0

実装方法

以下はファイル構成です。
今回手を加えるファイルのみを記載しています。

plugins/
 casareal/ <=== 作者名
  test/ <=== プラグイン名
     controllers/
       User.php
     models/
       user/
         columns.yml

モデルのUser.phpで使用するテーブルは”user”とし、以下のようなカラムで成り立っているとします。
・id /int型 ユーザID(連番)
・name /varchar型 ユーザ名
・prefecture /int型 都道府県ID

結合させるテーブルは”prefecture”とし、以下のようなカラムで成り立っているとします。
・id /int型 都道府県ID
・name /varchar型 都道府県名

OctoberCMSで用意されている「listExtendQuery」というメソッドをオーバーライドすることができるので、Selectのクエリに条件などを加えてテーブル結合を行います。
公式のページ:https://octobercms.com/docs/backend/lists#extend-model-query

User.phpに以下のように記載することで、テーブル結合を行うことができます。
今回はjoinを使っていますが、状況によってleftJoinに変更したり、whereで条件を追加したりして必要なリストが取得できるように調整してください。

public function listExtendQuery($query)
{
    $query->join('prefecture', 'user.prefecture', '=', 'prefecture.id');
}

コントローラに記載ができたら、結合したテーブルのカラムを表示できるようになりましたので、columns.ymlを変更します。

columns.yml

columns:
  id:
    label: ユーザID
    type: number
    select: user.id
  name:
    label: ユーザ名
    type: text
    select: user.name
  prefecture:
    label: 都道府県
    type: text
    select: prefecture.name

上記のように、selectオプションで「テーブル.カラム」の形で指定しないと、同じ名前のカラムがあった場合に、欲しい値が取得できなくなってしまう可能性があるので、確実にカラム指定をしたい場合はselectオプションを必ず使用しましょう。

まとめ

以上が、OctoberCMSのリスト画面で他テーブルのカラムを表示する方法でした。
モデルに関係性を記載して、カラムの取得を行う方法もあるにはあるのですが、そちらはまた次の機会にでもご紹介したいと思います。


--------------------------
システム開発のご要望・ご相談はこちらから

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です