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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

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

Q&A

2回答

11705閲覧

CakePHPで配列の値を取得したい

h.yamazaki

総合スコア20

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

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

0グッド

1クリップ

投稿2018/12/07 16:57

CakePHP3で簡易的なECサイトを作っています。
セレクトボックスの値を取得する機能に関してまして、実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

Cannot convert value of type `array` to integer

該当のソースコードはこちらになります。(コントローラー部分、ビュー部分)

・コントローラー部分

class ItemsController extends AppController { public function initialize() { parent::initialize(); $this->loadModel('Categories'); $this->loadModel('Users'); $this->loadModel('Budgets'); } public function search() { $budgets = $this->Budgets->find('all'); $categories = $this->Categories->find('all'); $users = $this->Users->find('all'); $this->set(compact('budgets')); $this->set(compact('categories')); $this->set(compact('users')); } public function result() { if($this->request->is('post')){ $name =$this->request->getData(['name']); $budget_id =$this->request->getData(['budget']); $category_id = $this->request->getData(['category']); $c_arr = array( 'or'=>array( array('Items.name like'=>'%'.$name.'%'), array('Items.detail like'=>'%'.$name.'%'), ) ); if(!empty($budget_id)){ $c_arr += array('Items.budget_id' => $budget_id); } $data = $this->Items->find('all') ->where($c_arr) ->contain(['Budgets']); // echo($data->sql()); var_dump($data); $this->set('items',$data); $this->set('name',$name); } }

・ビュー部分(search.ctp)

<div class="input-group" > <?= $this->Form->create(null,['url'=>['controller'=>'Items','action'=>'result']]); ?>   <?= $this->Form->control('name',['type' => 'text','label' => false,'placeholder' => 'キーワードを検索','class' => 'form-control']); ?>  <span class="input-group-btn">   <?= $this->Form->button(__('検索'),['type' => 'submit','class' => 'btn btn-default']); ?>    </span> </div> <div class="panel-group"> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"> <a data-toggle="collapse" href="#collapse3">値段</a> </h4> </div> <?php $s_budget = []; foreach ($budgets as $budget) { $s_budget += array($budget->id => $budget->budget); // print_r($s_budget); } // 価格の出し方 // $test = 29800; // echo number_format($test); ?> <div id="collapse3" class="panel-collapse collapse"> <ul class="list-group"> <li class="list-group-item"><?= $this->Form->select('budget',$s_budget, ['multiple' => 'checkbox','default' => '0','empty' => '指定なし']); ?> </li>   </ul> </div> </div> </div> <?= $this->Form->end(); ?>

試したこと

セレクトボックスを使って検索をかけた場合のみ、上記のエラーが出力されます。
var_dumpをし、配列としてセレクトボックスの部分が以下のようにも出力されました。

':c2' => array (size=3) 'value' => array (size=1) ... 'type' => string 'integer' (length=7) 'placeholder' => string 'c2' (length=2)

よろしければ、どなたかご教授の程、よろしくお願いします。

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

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

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

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

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

guest

回答2

0

リスト項目に使う項目は

$budgets = $this->Budgets->find('all');

ではなく

$budgets = $this->Budgets->find('list');

としましょう。

そうすることで

$this->Form->control("NAME", [ "option" => $budgets ]);

または

$this->Form->select("NAME", $budgets , [ /* option */ ]);

のように記載できます。
エラーの原因はオプションの組み方が間違えてるせいかな

投稿2018/12/08 07:06

編集2018/12/08 07:13
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

serch.ctp 内の budget 配列の中身が、

['multiple' => 'checkbox','default' => '0','empty' => '指定なし']

であるのに対して、ItemController 内の

$c_arr += array('Items.budget_id' => $budget_id);

の部分でキーの値を加算していますね。
配列のキーを整数にそろえるか、

$c_arr .= array('Items.budget_id' => $budget_id);

と文字列の追加演算にする必要があるでしょう。文字列間に" "が必要かも知れません。
つまり、

$c_arr .= array('Items.budget_id' => $budget_id)." ";

の形式かです。

投稿2018/12/08 01:01

seastar3

総合スコア2285

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

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

退会済みユーザー

退会済みユーザー

2018/12/08 06:45

array += array は  arrya = array + array 左(ベース)に右(デフォルト)として ベースに存在しないものをデフォルトに設定する。 また array .= array は 文字列として  ArrayArray にならんか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問