たなちの開発日誌

自分の知識をストックしていくためのブログ

【cakePHP】データ抽出 テーブルから取得したデータをプルダウンに表示

下記のように書いたら想定通り表示された。

前記事でなぜfind()が通らなかったのかは知らん。

 

アソシエーションがあるテーブル 

containでjoinしたテーブルからデータを取得できるようにした。

はじめ単数形と複数形が違っていたせいで通らなかった。

テーブル名:world_areas(複数形)

コードに書いたテーブル名:world_area(単数形)

keyFieldの値が、inputで指定した項目に登録される。

 

コントローラー

$this->set('select', $this->Countries->find( 'list', [
  'keyField' => 'world_area.cd',
  'valueField' => 'world_area.world_area_name'
])->contain(['WorldAreas']));

 

ビュー

//世界エリア名
echo $this->Form->input('world_area_cd',
['type' => 'select',
'options' => $select]);

 

アソシエーションがないテーブル

「TableRegistry::get」することで使えるように。
「use Cake\ORM\TableRegistry;」の名前空間の宣言も必要。

namespace App\Controller;
use Cake\ORM\TableRegistry;

 

class MCountriesController extends AppController
{

  public function add()
  {
    $this->MWorldAreas = TableRegistry::get('WorldAreas');

    $this->set('select', $this->WorldAreas->find( 'list', [

      'keyField' => 'cd',
      'valueField' => 'world_area_name'
    ]));

  }

}

下記を参考に。

absg.hatenablog.com

 

これ実現するのに無駄に時間かかってしまった。

SQLゴリゴリ書く方が楽と思ったけど、文法がわかれば楽になるのかな??