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

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

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

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

CakePHP

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

Q&A

解決済

2回答

4077閲覧

CakePHP3を使ったテーブルの作成方法

arsro

総合スコア24

MySQL

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

CakePHP

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

0グッド

0クリップ

投稿2015/11/22 07:30

MySQLに直接アクセスして、テーブルを作成することはできます。(以下テーブル作成クエリ)

sql

1 CREATE TABLE `comment_table` ( 2 `comment_table_id` int(11) unsigned NOT NULL AUTO_INCREMENT , 3 `post_id` int(11) NOT NULL , 4 `user_id` int(11) NOT NULL , 5 `id` int(11) NOT NULL , 6 `text` text NOT NULL , 7 `img` text , 8 `create_at` datetime NOT NULL, 9 PRIMARY KEY (`colony_comment_table_id`) 10 ) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8;

しかし、CakePHP3のコード上で上と同じようなコードを再現することができません。
公式ドキュメントを読んで書いてみたのですが、やはり動作しないようです。

php

1 class MapsController extends AppController { 2 public function createColony(){ 3 $createTable = $this->table('comment'); 4 $createTable 5 ->addPrimaryKey('comment_table_id','int',[ 6 'limit'=>11, 7 'unsigned'=>true, 8 'NOT NULL'=>true, 9 'AUTO_INCREMENT'=>true 10 ]) 11 ->addColumn('post_id','int',[ 12 'limit'=>11, 13 'NOT NULL'=>true, 14 ]) 15 ->addColumn('user_id','int',[ 16 'limit'=>11, 17 'NOT NULL'=>true 18 ]) 19 ->addColumn('id','int',[ 20 'limit'=>11, 21 'NOT NULL'=>true 22 ]) 23 ->addColumn('text','text',[ 24 'NOT NULL'=>true 25 ]) 26 ->addColumn('img','text') 27 ->addColumn('create_at','datetime',[ 28 'NOT NULL' 29 'limit'=>11, 30 'NOT NULL'=>true, 31 ]) 32 ->addColumn('user_id','int',[ 33 'limit'=>11, 34 'NOT NULL'=>true 35 ]) 36 ->addColumn('colony_id','int',[ 37 'limit'=>11, 38 'NOT NULL'=>true 39 ]) 40 ->addColumn('text','text',[ 41 'NOT NULL'=>true 42 ]) 43 ->addColumn('img','text') 44 ->addColumn('create_at','datetime',[ 45 'NOT NULL' 46 ]) 47 ->create(); 48 } 49 } 50

なにかありましたら、随時補足いたします。
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

直接の回答ではありませんが、
DDLはDB管理者や管理チームでやることで、経理などのDB利用者はDMLを実行できるだけ、で良いのでは?
DB利用者が勝手にテーブルをCREATEしたり、テーブルをMODIFY、DROP できたら、子どもに拳銃を預けるに等しいことになるかも?

投稿2015/11/22 08:57

Orlofsky

総合スコア16415

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

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

0

ベストアンサー

これはマイグレーションファイルの書式ですね。
ファイルとして保存して、コンソールから

bin/cake migrations migrate

として実行するものであって、Controllerから実行するものではありません。書式は少し変わりますが、コンソールから schema を実行しても似たようなことはできます。
Migrations - CakePHP Cookbook 3.x ドキュメント

Controller から、つまりはウェブから実行したいという話であれば、Orlofsky さんと同じで、私も推奨しません。query() で 直接 SQL文を投げれば DDL の実現は可能です。

テーブル等の作成変更をCakePHP で管理したいというのであれば、Migrations は一つの解決策になるでしょう。

投稿2015/11/22 12:31

izkn

総合スコア1698

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問