CakePHP3を使ってアソシエーション設定する際に、データ型が正しく出力されません。
各テーブルは以下の通りです。*カラム名の括弧内はデータ型
UsersTable
id(int) | name(varchar) | sex(int) |
---|---|---|
1 | hoge | 1 |
2 | foo | 2 |
SexsTable
id(int) | type(varchar) |
---|---|
1 | 男性 |
2 | 女性 |
UsersTable.phpのアソシエーション設定は以下の通りです。
PHP
1public function initialize(array $config){ 2 $this->belongsTo('sexs',[ 3 'joinType' => 'LEFT', 4 'foreignKey' => 'sex', 5 'bindingKey' => 'id', 6 'propertyName' => 'sexs' 7 ]); 8}
findで取得した結果をダンプすると、sexのデータ型がUsersTableの外部キーの型(int)になってしまいます。
UsersTableのsexをvarchar型に変更すると、ダンプしたsexの型がstringになります。(他の型に変更しても同様の挙動となります)
PHP
1 //UsersController 2 $userDatas = $UserTable->find() 3 ->where('id' => $id) 4 ->contain(['Sexs']) 5 ->select([ 6 'name' => 'name', 7 'sex' => 'sexs.type', 8 ]) 9 ->first(); 10 11 echo "<pre>"; 12 var_dump($userDatas); 13 echo "</pre>"; 14 15 //出力結果(UsersTableのsexのデータ型がintegerの状態) 16 ["name"]=> 17 string(13) "hoge" 18 ["sex"]=> 19 int(0) 20 21 //出力結果(UsersTableのsexのデータ型をvarcharに変更後) 22 ["name"]=> 23 string(13) "hoge" 24 ["sex"]=> 25 string(6) "男性"
UsersTableのsexはint型にしたいのですが、なぜ取得したいSexsTableのデータ型が、UsersTableの外部キーのデータ型になってしまうのでしょうか。
もしわかる方がお見えでしたら、お願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。