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

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

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

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

CakePHP

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

Q&A

1回答

3004閲覧

[cakephp]HABTMのデータが保存できません。

K-O

総合スコア8

PHP

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

CakePHP

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

0グッド

0クリップ

投稿2016/06/29 07:58

###背景
PHP(cakePHP)でまとめサイトを作っています。
HABTMの関係を用いて各記事にタグをつけて
保存したいのですがうまくできません。

###関連するデータとその関係性
postsテーブル→各記事のデータです。id,title,contentなどのデータが入っています。
tagsテーブル→タグデータです。id,nameの二つのデータです。
posts_tagsテーブル→postsとtagsをつなぐ中間テーブルです。id,post_id,tag_idの3つです。

記事作成時に、作成中の記事がどのタグと紐付いているかの情報を
posts_tagsテーブルに一緒に保存したいと考えています。

###困っていること
記事作成時に、posts_tagsテーブルにデータが登録できず困っています。
登録しようとしたデータをデバッグしてみたところ、 下記のようになっていました。

array( 'Post' => array( 'title' => 'hogehoge' ), 'Tag' => array( 'tag' => array( (int) 0 => '1', (int) 1 => '3' ) ) )

いろいろ調べたところ、下記のようになっていないと登録できないことまでは分かりました。

array( 'Post' => array( 'title' => 'hogehoge' ), 'Tag' => array( 'tag' => array('1','3' ) ) )

しかし、どうすればこのような形でデータを渡すことでできるようになるかがわかりません。
どなたかお詳しい方、ご教授をお願いいたします。。。

※SQLで直接posts_tagsテーブルにデータを登録することはできています。
また、登録したデータによってサイト上で記事とタグが紐づけられて表示できることも確認しています。

###該当のソースコード

PostsController.php public function add($id = null){ if ($this->request->is('get')){ }else{ if ($this->Post->save($this->request->data)) { $this->redirect(array('action' => 'index')); } } }
add.ctp <?php echo $this->Form->create('Post');?> <div>基本情報</div> <div class="form_label"><p>タイトル</p></div> <?php echo $this->Form->input('title', array('type' => 'text', 'label' => false));?> <div class="form_label"><p>タグ</p></div> <?php echo $this->Form->input('Tag.tag', array('type'=>'select','label' => false, 'multiple' => 'checkbox', 'options' =>$tags));?> <?php echo $this->Form->submit('登録する', array( 'id' => 'submit'));?> <?php echo $this->Form->end(); ?>

###補足情報(言語/FW/ツール等のバージョンなど)
・cakephp2.7.3
・サーバ: Localhost via UNIX socket
・サーバの種類: MySQL
・サーバのバージョン: 5.5.38 - Source distribution

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

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

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

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

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

guest

回答1

0

Model::save()メソッドは基本的に単一モデルの保存になります。
この場合はModel::saveAssociated()メソッドを使うことをお勧めします。

参考
http://book.cakephp.org/2.0/ja/models/saving-your-data.html#model-saveassociated-array-data-null-array-options-array

投稿2016/07/01 06:23

CodeLab

総合スコア1939

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

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

K-O

2016/07/03 08:45

ご回答ありがとうございます。 教えていただいた通り、 $this->Post->saveAssociated($this->request->data, array('deep' => true) に変更してみたのですが保存できませんでした。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問