下記のように書いたら想定通り表示された。
前記事でなぜ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'
]));
}
}
下記を参考に。
これ実現するのに無駄に時間かかってしまった。
SQLゴリゴリ書く方が楽と思ったけど、文法がわかれば楽になるのかな??