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

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

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

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

Q&A

解決済

1回答

1929閲覧

CakePHPの関数の記述方法について

ssk

総合スコア332

CakePHP

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

0グッド

0クリップ

投稿2017/01/26 14:31

編集2017/01/26 14:47

PHP

1//HogesController.php 2$column01 = $this->Functions->_SearchCheckBox($this->request->data('column01'),'name','column01');

PHP

1//HogesComponent.php 2 public function _SearchCheckBox($array_value,$name,$column){ 3 $CheckBox = Configure::read('CheckBox');//配列 4 $hoges = $this->Hoges->find(); 5 $hoges->where(function ($exp, $q) use ($array_value) { 6 if (is_array($array_value) && count($array_value) > 0) { 7 $i = 0; 8 foreach ($array_value as $key) { 9 if($i == 0){ 10 $orConditions = $exp->or_([$column => $CheckBox[$name][$key]]); 11 }else{ 12 $orConditions->eq($column,$CheckBox[$name][$key]); 13 } 14 $i++; 15 } 16 } 17 18 return $exp 19 ->add($orConditions); 20 }); 21 }

PHP

1//エラー 2Call to a member function find() on null

######知りたいこと
$hoges = $this->Hoges->find();
コンポーネントでfind()が使えるようにしたいです。

######補足
検索でチェックボックスの項目が多いので、関数でまとめようとしました。
関数を書く場所が間違っていますか?何か読み込めば今のまま使えるかと
思うのですが、、それもどうなんでしょう。

チェックボックスの項目の度に
以下を書いている状態なので、どうにかしたいと試みております。

PHP

1//HogesController.php 2$column01 = $this->Functions->SearchCheckBox($this->request->data('column01'),'name');//配列 3 $hoges = $this->Hoges->find(); 4 $hoges->where(function ($exp, $q) use ($column01) { 5 if (is_array($column01) && count($column01) > 0) { 6 $i = 0; 7 foreach ($column01 as $key => $value) { 8 if($i == 0){ 9 $orConditions = $exp->or_(['column01' => $value]); 10 }else{ 11 $orConditions->eq('column01',$value); 12 } 13 $i++; 14 } 15 } 16 17 return $exp 18 ->add($orConditions); 19 });

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

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

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

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

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

guest

回答1

0

ベストアンサー

コンポーネントからモデルのテーブルを使いたいということですよね
やり方は2通りあります。

TableRegistryからテーブルを取得する方法

php

1use Cake\ORM\TableRegistry; 2$this->Hoges = TableRegistry::get('Hoges');

Controllerを経由して使う方法

php

1public function initialize(array $config) { 2 $this->controler = $this->_registry->getController(); 3} 4 5public function test() { 6 $this->controller->loadModel("Hoges"); 7 $this->controller->Hoges->find(); 8}

参考:Cakephp 3.0 - Load Model inside Component

余談ですが、Hogesテーブルの処理を関数化したいなら、Hogesテーブルに処理を書いた方が普通かもしれません。多くのコントローラで共通な関数を共通化するならコンポーネントでしょうけど。

投稿2017/01/26 22:29

popobot

総合スコア6586

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

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

ssk

2017/01/27 03:51

助言ありがとうございます! Hogesテーブルに処理を記述して対応いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問