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

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

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

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

Q&A

解決済

1回答

3462閲覧

CakePHP3の仮想プロパティでエラー

njgit3448

総合スコア18

CakePHP

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

0グッド

0クリップ

投稿2018/09/26 01:51

CakePHP3.6を使用しています。
あるテーブルで仮想プロパティの設定を行うと、実在するフィールド(name)を読むところで'Undefined index: name'のエラーが発生します。別のテーブルで同じ仮想プロパティを設定したときには正常に動作したため、そのソースをコピーしています。どこをチェックすればいいでしょうか?

PHP

1// src/Model/Entity/AllSchedule.php 2namespace App\Model\Entity; 3use Cake\ORM\Entity; 4 5class AllSchedule extends Entity 6{ 7 protected $_virtual = ['name2']; 8 9 protected function _getName2() 10 { 11 $pattern = '/((一社)|(社)|(有)|(株)|株)|*|株式会社|有限会社)/'; 12 $replacement = ''; 13 // 下の行でエラー発生 14 $name2 = preg_replace($pattern, $replacement, $this->_properties['name']); 15 return $name2; 16 } 17 18 protected $_accessible = [ 19 'id' => true, 20 'class' => true, 21 'date' => true, 22 'code' => true, 23 'name' => true, 24 ]; 25

なお、下記のindexページでは正常にnameフィールドが表示されています。

PHP

1// src/Controller/AllSchedulesController.php 2 public function index() 3 $allSchedules = $this->paginate($this->AllSchedules->find()); 4 $this->set(compact('allSchedules')); 5 }

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/09/26 02:08

合資会社・合同会社・合名会社(ぼそっ
njgit3448

2018/09/26 02:12

古い情報があるのでこうしていますが、そこが問題ですか?
njgit3448

2018/09/26 02:55

失礼しました。それも必要ってことですね。追加したいと思います。
guest

回答1

0

ベストアンサー

どういうシーンでEntityを利用しているのかわかりませんが...
find()などでDBからデータを引いた場合は、nameプロパティが設定されているので問題ないと思いますが、以下のように$this->AllSchedules->newEntity()などでEntityを生成した場合、nameプロパティが設定されていないので、Undefined indexが発生すると思います。

isset($this->_properties['name'])などで値が設定されているか確認するか、$this->nameを使えば問題を回避できると思います。

投稿2018/09/26 08:22

popobot

総合スコア6586

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

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

njgit3448

2018/09/27 00:47

popobotさん、ご回答ありがとうございます。 Entityはfind()で利用していますが、$this->nameに置き換えたところエラーが無くなり、name2も取得できました。ありがとうございました。 newEntityではないのにどうして$this->_properties['name']がエラーとなるのかは今後調べたいと思っています。
popobot

2018/09/27 02:22

不思議ですね... 考えられることとしては... AllSchedule内で_setName を自前で定義していて悪影響がでているとかでしょうか...
njgit3448

2018/10/03 04:27

ありがとうございます。_setNameは定義していません。このテーブルは他のシステムで使っているテーブルを元にDBで作ったビューを参照しているので、もしかするとそれが関係しているのかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問