

英語版（下記）に投稿した質問なのですが、うまく説明できてなかったのかもしれません。  
分かる方いらっしゃいましたらご教授をお願いします。  
<https://stackoverflow.com/posts/comments/117799800?noredirect=1>  
  
  
マイグレーションで「 **foo_logs** 」というテーブルを作成、「 **FooLogs**
」という名前でモデルとコントローラーをbakeしました。コントローラには「 **$FooLogs** 」というプロパティが追加されています（DOC内）。

bakeで生成された以下のコードでは、正常にデータが取得できました。  
`$fooLogs = $this->paginate($this->FooLogs);`  
しかし、以下のように変更すると、例外「Call to a member function find () on null」となります。  
`$fooLogs = $this->paginate($this->FooLogs->find('all')->where($Conditions));`

デバッガで処理を追うと FooLogs ではなく「 **Foologs**
」でモデルクラスを特定しようとしていました（文字列として一致しない）。そのためモデルクラスを特定できずに、結局 $this->FooLogs は null
のままとなり、例外が発生します。  
bakeで生成されたコードの場合は、「FooLogs」で特定するようです。

find()
使用時にモデルクラスの特定に「Foologs」が使われるのには、何か理由があるのでしょうか。「log」というワードはCakePHPで特別な意味を持っているのでしょうか？

よろしくお願いいたします。


CC BY-SA 4.0
2021-03-19T07:47:53.653
74762
2021-04-01T08:20:34.927
44343
question
cakephp
bakeで追加されたプロパティーが内部で使われているものと一致しません（CakePHP4）


とりあえず、対処方法を書いておきます。

$this->FooLogs を $this->Foologs に変更すれば動作はしますが、基本的に、bake
時に指定した名称（FooLogs）が使われるべきと考えます。  
そこで、コントローラーの initialize() でモデルをロードします。これにより、bake
時に指定した名称を変更することなく、各メソッド内からアクセスできます。  
  
  
※この投稿の主旨は「 **find() において、なぜモデルクラスの特定に bake 時と異なる名称が使われることがあるのか、その理由を知りたい**
」ですので、引き続き、識者の皆さんのご意見をお待ちしたいと思います。


CC BY-SA 4.0
2021-03-23T03:28:45.523
74831
2021-03-23T03:28:45.523
44343
74762
answer


_※解決したので回答を差し替えます。_

原因は、当該コントローラーのページへのリンク出力で、以下のように。コントローラー名を「foologs」としていたためでした。モデルクラスの解決の際、頭文字だけは大文字になるようです（foologs
→ Foologs）。  
`$this->Html->link('○○○○', ['controller'=>'foologs'])`

凡ミスというやつですね。コントローラー名を正しく記述することで、問題なく動作することを確認しました。

お騒がせしました。


CC BY-SA 4.0
2021-04-01T08:20:34.927
75013
2021-04-01T08:20:34.927
44343
74762
answer