🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CakePHP

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

Q&A

解決済

3回答

5124閲覧

Call to a member function save() on nullの解決

kuuhaku4262

総合スコア39

CakePHP

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

1グッド

0クリップ

投稿2019/11/15 01:35

編集2019/11/15 06:54

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
PHP(CakePHP)でマスタ画面を作っています。
マスタの新規登録時にに以下のエラーメッセージが発生しました。

前提として、MtShiftPatternとMtShiftPatternsの二つがあり、モデル名やテーブル名などで使い分けないといけないと決まっているみたいです。
初心者のためわかる範囲での質問であることをお許しください。

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

Fatal Error Error: Call to a member function save() on null File: C:\xampp\htdocs\car-maintenance\app\Controller\MtShiftPatternsController.php Line: 59 Notice: If you want to customize this error message, create app\View\Errors\fatal_error.ctp

該当のソースコード

cakephp

1<?php 2App::uses('AppController', 'Controller'); 3 4class MtShiftPatternsController extends AppController { 5 6 public function index() { 7 8 } 9 10 11 public function search() { 12 13 $this->autoRender = false; 14 $this->response->type('json'); 15 16 if ($this->request->is('get')) { 17 18 $shift = $this->shift_patterns(); 19 20 return json_encode(['success' => 'success', 'data' => $shift ]); 21 } 22 23 24 $this->response->statusCode(403); 25 return json_encode(['error' => ['message' => '仕様で定義されていないMETHODです。']]); 26 } 27 28 public function detail($id = 0) { 29 $this->autoRender = false; 30 $this->response->type('json'); 31 32 // $idの確認 33 if (! ctype_digit($id) && $id !== 0) { 34 $this->response->statusCode(403); 35 return json_encode(['error' => ['message' => 'ID以外の値が渡されました。'. $id]]); 36 } 37 38 39 if ($this->request->is('get')) { 40 41 $shift = $this->MtShiftPattern->find('first', ['conditions' => ['id' => $id]]); 42 43 if (empty($shift)) { 44 $this->response->statusCode(404); 45 return json_encode(['error' => ['message' => '未登録のIDが指定されました。'. $id]]); 46 } else { 47 return json_encode(['success' => 'success', 'data' => $shift]); 48 } 49 } elseif ($this->request->is('post')) { 50 51 if ($id > 0) { 52 $this->request->data['MtShiftPattern']['id'] = $id; 53 $this->MtShiftPattern->id = $id; 54 $data['id'] = $id; 55 } else { 56 $this->MtShiftPattern->create(); 57 } 58 59 if ($this->MtShiftPatterns->save($this->data)) { 60 if ($id <= 0) { 61 $id = $this->MtShiftPattern->id; 62 } 63 64 return json_encode(['success' => 'success', 'data' => $this->request->data]); 65 } else { 66 $this->response->statusCode(500); 67 return json_encode(['error' => ['message' => '保存に失敗しました。']]); 68 } 69 } elseif ($this->request->is('delete')) { 70 // 削除 71 72 if ($id > 0) { 73 /* if ($this->User->find('count', ['conditions' => ['MtOffice_id' => $id]]) > 0) { 74 * $this->response->statusCode(403); 75 * return json_encode(['error' => ['message' => '使用中の権限です。未使用にしてから削除してください。']]); 76 * } */ 77 78 $this->MtShiftPattern->id = $id; 79 if ($this->MtShiftPattern->delete($id, true)) { 80 return json_encode(['success' => 'success', 'data' => []]); 81 } else { 82 $this->response->statusCode(500); 83 return json_encode(['error' => ['message' => '削除に失敗しました。']]); 84 } 85 86 } else { 87 $this->response->statusCode(403); 88 return json_encode(['error' => ['message' => 'IDを送信してください。']]); 89 } 90 } 91 92 $this->response->statusCode(403); 93 return json_encode(['error' => ['message' => '仕様で定義されていないMETHODです。']]); 94 } 95 96 97 private function shift_patterns() { 98 return $this->MtShiftPattern->find('all', ['order' => 'order_no']); 99 } 100} 101

試したこと

定義されていない変数名を使おうとしているからエラーが出ていると思ったのですが、どの変数がそれにあたるのかがわかりませんでした。

補足情報(FW/ツールのバージョンなど)

退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答3

0

ベストアンサー

定義されていない変数名を使おうとしているからエラーが出ていると思ったのですが、どの変数がそれにあたるのかがわかりませんでした。

エラーの解釈は違いますが「どの変数が」かはエラーに書いてあります。

Error: Call to a member function save() on null

File: C:\xampp\htdocs\car-maintenance\app\Controller\MtShiftPatternsController.php
Line: 59

CakePHP特有のものでもありません。

大方、下記が混ざってるのが原因でしょう。
MtShiftPattern
MtShiftPatterns

どちらかしか存在しないのか、両方存在するのかで対応は違いますが、まずはデバッグしてみては。

エラーメッセージの読み方と対処, 検索や質問の原則

投稿2019/11/15 02:05

m.ts10806

総合スコア80875

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

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

kuuhaku4262

2019/11/15 04:34

どちらも存在しています。 とりあえずデバックしてみます。
m.ts10806

2019/11/15 04:58

>どちらも存在しています。 質問内容に提示されたコードからはそれが読み取れませんでした。 読み取れるように質問に追記願います
kuuhaku4262

2019/11/15 06:37

もう一方のコメントに回答させていただきました。 そちらをご覧いただくようお願いいたします。
m.ts10806

2019/11/15 06:38

流れもあるのでこちらに書いていただくべきと思います
kuuhaku4262

2019/11/15 06:44

テーブル名やモデル名など単数形ではいけないや複数形ではなくてはいけないということが前提として決められていると先輩が言っていました。 何分、初心者のため理解している部分が少なくわかる範囲でのコメントとなることをお許しください。
m.ts10806

2019/11/15 06:47

いえ、きちんと書いてもらえればそこも考慮できるので。 特に社内ルールやプロジェクト固有ルールがあったりするとそこは他者がわからない領域となります。 CakePHP自身のネーミングルールに則っていればあとは開発者次第なので、ある程度説明があった方が助かります
kuuhaku4262

2019/11/15 06:57

アドバイスありがとうございます。 社内のルールなどがまだわかっていない状態なので、確認してみます。
m.ts10806

2019/11/15 07:08

そこはあまり外に出してはいけない部分かもしれないので質問する際には注意が必要です。
guest

0

nullなのでsave関数は実行できまへん、というエラーなので、心当たりのある(というよりエラーの出た)行に出てくる変数の値をチェックしてみれば。

投稿2019/11/15 01:42

y_waiwai

総合スコア88038

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

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

guest

0

59行目で「MtShiftPattern」と書かないといけないところを「MtShiftPatterns」と書いていたため、「s」を消したら治りました。

投稿2019/11/15 05:29

kuuhaku4262

総合スコア39

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

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

m.ts10806

2019/11/15 05:53

私の回答の通りの結果ですがコメントにあった「両方ある」は結局どう言うことだったのでしょうか。 (これで自己解決はちょっと納得いかないですね)
kuuhaku4262

2019/11/15 06:34

モデル名やテーブル名などでどちらを使うのか元から決められているようでした。 使い方をまだ理解できていなく、せっかくアドバイスをもらい解決できたにもかかわらず自己解決という形になってしまい大変嫌な思いをさせてしまいました。 申し訳ございませんでした。 一度未解決にして、ベストアンサーにさせていただきます。 プログラマー初心者のためこの場でたくさん質問すると思いますので、その時は少しでもアドバイスをしていただけると幸いです。 今後とも、よろしくお願いいたします。
m.ts10806

2019/11/15 06:37

>モデル名やテーブル名などでどちらを使うのか元から決められているようでした。 ちょっとよくわかりませんが、前提や背景、経緯があるのでしたらそれはきちんと書かれないと誰にも正しく伝わりませんし考慮はできません。 回答する限りはそれなりの知見を持ってはいますが質問者さんの傍らで状況を見てるわけでもエスパーでもないので、持ちうる情報は基本的に全て前もって出すようにしてくださいね
kuuhaku4262

2019/11/15 06:40

大変失礼いたしました。 次回から、持ちうる情報を全て記入するようにいたします。 アドバイス、ありがとうございました。
m.ts10806

2019/11/15 06:43

質問は編集できますので、適宜対応するようにしてくださいね
kuuhaku4262

2019/11/15 06:55

編集致しました。 確認していただいて、もし何か気になるようなことがありましたらアドバイスお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問