質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

1回答

3035閲覧

重複しない選択肢のセレクトボックス

pato

総合スコア32

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

1クリップ

投稿2015/11/13 02:00

cakephp2.7を使っています。
セレクトボックスの選択肢を、テーブルのデータにしたいのですが、

(例)
id name posi
1 aaa FW
2 bbb FW
3 ccc MF
4 ddd MF
5 eee DF
6 fff DF

のようなテーブルがあるとき、ビューでFW、MF、DFが選択肢のセレクトボックスを設置したい。

コントローラに

public function showcate(){ $params = array( 'fields'=>array('Hoge.q_cate') ); $data_model = $this->Hoge->find('list', $params); $this->set("data_model", $data_model); debug($data_model); }

のように書き、ビューに

<?php echo $this->Form->select('Hoge.q_cate', $data_model); ?>

のように書くとセレクトボックスは設置できるのですが、これだと重複している行も全て選択肢として表示されます。(上の例だと「FW,FW,MF,MF,DF,DF」という選択肢になる。)重複しないようにするにはどうしたらいいか調べたら、

public function showcate(){ $params = array( 'fields'=>array('DISTINCT Hoge.q_cate') ); $data_model = $this->Hoge->find('list', $params); $this->set("data_model", $data_model); debug($data_model); }

のように書けばよいようなので、これで実行させると

Database Error Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT `Hoge`.`q_cate` FROM `db1`.`hoges` AS `Hoge` WHERE 1 = 1' at line 1

というエラーが出ました。何が悪いでしょうか?どうしたらよいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

find('list') ではなく、find('all') で実行してみてください。

find('list') はデフォルトでは、idname を、今回のケースだとidposiを取得します。
その際、以下のようなSQLが作成されます。

sql

1mysql> select id, distinct posi from hoge; 2ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'distinct posi from hoge' at line 1

このように普通にMySQLで叩いてもエラーになります。

posiだけが取得できるように、find('all') で実行してみてください。

投稿2015/11/13 03:08

izkn

総合スコア1698

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問