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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

CakePHP

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

Q&A

解決済

2回答

374閲覧

CAKEPHP3 テストサーバーでDATABASE ERRORが出ました。

lovelydai

総合スコア38

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

CakePHP

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

0グッド

0クリップ

投稿2017/10/25 02:19

編集2017/10/25 03:17

こんにちは。
何回も質問あげていますが、学校の時間割システムを作っています。
Localでは問題なく動いているのでテストサーバーにファイルをアップしてテストしようと思いました。
DBは、CREATEしただけでデータは入ってない状態です。
そうしたら、アソシエーションがかかってないIndexページは空いているリストが出るので大丈夫でしたが、何か他のテーブルとアソシエーションがかかっているIndexページは、以下のようなエラーメッセージが出ます。

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'course.deleter' in 'where clause'

エラーになる部分は、コントローラーのIndex()内の$course = $this->paginate($course); だそうです。

データが何も入ってないので、空リストが出るようにしたいですが、エラーになるので大変困っています。
何かアドバイスいただければと思います。
よろしくお願いいたします。

SQL

1CREATE TABLE `course` ( 2 `id` int(10) UNSIGNED NOT NULL COMMENT '自動採番キー', 3 `course_idx` int(10) UNSIGNED NOT NULL COMMENT '学科ID', 4 `year` year(4) NOT NULL COMMENT '年度', 5 `customer_idx` int(10) UNSIGNED NOT NULL COMMENT '契約ID', 6 `course_code` text NOT NULL COMMENT '学科コード', 7 `section_idx` int(10) UNSIGNED NOT NULL COMMENT '学部ID', 8 `course_name` text COMMENT '学科名', 9 `course_short` text COMMENT '短縮名', 10 `memo` text COMMENT '備考', 11 `is_used` tinyint(1) DEFAULT NULL COMMENT '使用フラグ : true:使用/false:未使用', 12 `creater` text COMMENT '作成者 : 作成者のアカウント', 13 `created` datetime DEFAULT NULL COMMENT '作成日時', 14 `modifier` text COMMENT '更新者 : 更新したアカウント', 15 `modified` datetime DEFAULT NULL COMMENT '更新日時', 16 `deleter` text COMMENT '削除者 : 削除実行したアカウント', 17 `deleted` datetime DEFAULT NULL COMMENT '削除日時' 18) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='学科マスタ : 学科の情報を保持するテーブル';

PHP

1 public function index() 2 { 3 // ビューに表示するためのデータセット生成 4 $course = $this->Course->find()->where(['course.deleter IS NULL', 'course.deleted IS NULL']) 5 ->andWhere(['course.year'=>$year]) 6 ->andWhere(['course.customer_idx' => $this->Auth->User('customer_idx')]) 7 ->select(['id','course_idx','course_code','section_idx','course_name', 8 'course_short','is_used']) 9 ->contain(['Section' => function($q) { 10 return $q->select(['section_idx','section_name']); 11 }, 12 ]); 13 14 $course = $this->paginate($course); // この行でエラーになります。 15 16 $this->set(compact('course')); 17 $this->set('_serialize', ['course']); 18 } 19

イメージ説明

[試してみたこと] 少しマニュアルをみてコード変えてみましたが結果は同じでした。

PHP

1 $course = $this->Course->find('all',[ 2 'conditions' => ['deleter IS NULL', 'deleted IS NULL','year'=>$year,'customer_idx' => $this->Auth->User('customer_idx')], 3 'contain' => ['Section' => function($q) { 4 return $q->select(['section_idx','section_name']); 5 }, 6 ] 7 ]);

[また試してみたこと] LocalのDBからデータを削除し、空の状態にしてみたらLocalでは問題なく空リストが表示されました。

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

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

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

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

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

guest

回答2

0

Unknown columnは「データベースにカラムが存在していませんよ」というエラー内容になります。エラーメッセージには「Unknown column 'course.deleter'」と書いてあるので、「course.deleterという名前のカラムはcourseテーブルに存在していませんよ」という意味になります。

つまりおそらくは

$course = $this->Course->find()->where(['course.deleter IS NULL', 'course.deleted IS NULL'])

この部分から直す必要があるのかと。

【追記】
単純に、

$course = $this->Course->find()->where(['deleter IS NULL', 'deleted IS NULL'])

にしたら動くかもしれません。

投稿2017/10/25 02:40

編集2017/10/25 02:48
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

lovelydai

2017/10/25 02:56

回答ありがとうございます。しかし、私も試してみましたが追記していただいたコードで動かしてみると、Error: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'deleter' in where clause is ambiguous というエラーが出ます。
退会済みユーザー

退会済みユーザー

2017/10/25 03:03

では ->where(['course.deleter IS NULL']) ->andwhere(['course.deleted IS NULL']) これでどうでしょうか?
退会済みユーザー

退会済みユーザー

2017/10/25 03:05

もしくは ->where(['course.deleter IS NULL'], ['course.deleted IS NULL']) こちらでも動くかもしれません。
lovelydai

2017/10/25 03:52

ありがとうございます!原因がわかりました!
guest

0

自己解決

解決しました。すごく単純な原因でした。
テーブル名を大文字にしたら、うまく動きました。

// ビューに表示するためのデータセット生成 $course = $this->Course->find()->where(['Course.deleter IS NULL']) ->andWhere(['Course.deleted IS NULL']) ->andWhere(['Course.year'=>$year]) ->andWhere(['Course.customer_idx' => $this->Auth->User('customer_idx')]) ->select(['id','course_idx','course_code','section_idx','course_name', 'course_short','is_used']) ->contain(['Section' => function($q) { return $q->select(['section_idx','section_name']); }, ]);

投稿2017/10/25 03:54

lovelydai

総合スコア38

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問