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

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

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

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

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

Q&A

解決済

2回答

1303閲覧

idの追加

destrudo

総合スコア143

MySQL

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

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

0グッド

0クリップ

投稿2017/03/11 04:43

<?php class Models_update extends CI_Model{ public function __construct(){ parent::__construct(); $this->load->database(); } function update_data($value){ $this->db->limit(1); $this->db->update('profile',$value,array('name'=>'久保')); $this->output->enable_profiler(TRUE); } function add_col(){ $this->load->dbforge(); $this->dbforge->add_field('id'); } } ?>
<?php class Controller_update extends CI_controller{ public function __construct(){ parent::__construct(); $this->load->database(); } function index(){ $value=array( 'name'=>'山田', 'gender'=>'男', 'birthday'=>'2017-03-01', ); $this->load->model('models_update'); $this->models_update->update_data($value); $this->models_update->add_col(); } } ?>

今あるname,gender,birthdayのフィールドに新たにidフィールドを追加したいと思い、
dbforgeを追加してみたのですが、エラーは出ないんですが、idが追加されません。
何がいけないのでしょうか。

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

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

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

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

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

guest

回答2

0

ベストアンサー

動的に追加する意味がないならphpMyAdminで直接追加した方がいいですよ。

投稿2017/03/11 04:51

yona

総合スコア18155

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

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

destrudo

2017/03/11 06:30

はい、そうなんですけど、なぜdbforgeからできないのか疑問なんです。
yona

2017/03/11 06:46 編集

そのメソッドはクリエイト文にカラム追加の記述を追加するのであってテーブルにカラムを追加するメソッドではないからです。 追加した後にcreate_tableを呼ばないと意味がありません。しかも、その場合はカラムの追加ではなく、テーブルの新規作成です。 既存のテーブルにカラムを追加するならdbforge->add_columnを使いましょう。
destrudo

2017/03/11 07:04

function add_col(){ $this->load->dbforge(); $this->dbforge->add_column('profile',&id); として見ましたが、 Parse error: syntax error, unexpected ')', expecting '(' というエラ―が出ました。どうすればいいでしょうか。
yona

2017/03/11 09:16

それは構文エラーなので、あなたのコーディングミスです。コードを見直してください。
destrudo

2017/03/11 11:58

該当する行が $this->dbforge->add_column('profile',&id); これなんですけど、何か間違っているところありますか?
yona

2017/03/11 13:04

間違っていません。 シンタックスエラーは一行だけ提示されてもわかりません、コード全体を見ないとわならないです。
destrudo

2017/03/12 02:37

<?php class Models_update extends CI_Model{ public function __construct(){ parent::__construct(); $this->load->database(); } function update_data($value){ $this->db->limit(1); $this->db->update('profile',$value,array('name'=>'久保')); $this->output->enable_profiler(TRUE); } function add_col(){ $this->load->dbforge(); $this->dbforge->add_column('profile',&id); } } ?> これがモデル全体のコードです。 Parse error: syntax error, unexpected ')', expecting '(' in C:\xampp\htdocs\ci\application\models\models_update.php on line 25 とエラーが起きます。
yona

2017/03/12 04:22

idにアンパサンドつけてるのはなぜですか? 'id'ではないですか?
destrudo

2017/03/12 04:44

あっそれ気付かなかったです。ありがとうございます! function add_col(){ $this->load->dbforge(); $id_add = array( 'id' => array('type' => 'INT', 'first' => TRUE) ); $this->dbforge->add_column('profile', $id_add); } でidフィールド追加できました。 一歩前進です。
destrudo

2017/03/12 04:46

既存するレコードの数に対して、連番をつけたいのですが、これは次回の質問にした方がいいですかね。 今の状態だと番号は空っぽです。
yona

2017/03/12 04:51

質問する前に自分で考えた方がいいですね。それでもダメなら質問してください。時間がいくらあっても足りないですよ。
guest

0

今の書き方だとどのテーブルに追加したら良いかわからないから追加されないのでは?
下記ドキュメントを読み込んでみてください。

データベースフォージクラス - CodeIgniter 3.2.0-dev ドキュメント

$this->dbforge->add_field($fields); の後に呼ばれる create_table() メソッドでフィールドが追加されます。

投稿2017/03/11 06:40

ykws

総合スコア1236

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

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

destrudo

2017/03/11 07:11

create_tableということは、既存のテーブルにフィールドを追加することはできないということでしょうか。
ykws

2017/03/11 08:11

既存のテーブルを変更したい場合は、 yona さんの回答へのコメントに記載されている `add_column()` メソッドでできそうですね。第二引数にはフィールド定義の配列を受け取ります。
destrudo

2017/03/11 12:01

$id = array( 'preferences' => array('type' => 'TEXT') ); $this->dbforge->add_column('profile', $id); リファレンスを元に書いたものですが、フィールド定義の配列ってところが 分からないです。どう表記すればいいですか?
destrudo

2017/03/12 03:10

$fields = array( 'preferences' => array('type' => 'TEXT') ); $this->dbforge->add_column('profile', $fields); でしょうか。 Message: syntax error, unexpected ')', expecting '(' という謎のエラーが出て駄目でした。 該当行は$this->dbforge->add_column('profile', $fields);なんですけどね・・・。
ykws

2017/03/12 12:42

( の数があっていないようなので該当行だけでは判断できなそうですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問