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

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

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

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

CakePHP

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

Q&A

解決済

1回答

4400閲覧

cakePHP3のモデル(table/entity)の使い方(正しい作法?)について

TomoKubota

総合スコア53

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

CakePHP

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

1グッド

1クリップ

投稿2017/04/22 12:42

これまでCakePHP2を我流で勝手に使っていたのですが、
「それじゃフレームワークを使っている意味がないよ」という指摘を受けました。
データの操作に関わる部分を、生のSQLで書いていたり、MySQLにストアドプロシージャを書いて、
実行していたりしたためです。
じゃあ正しいフレームワークの使い方(作法)として、Modelをどう使えばいいのかが、
マニュアル等を読んでもいまひとつわかりません。

仮に以下のような処理を行おうとした場合、
modelのtable/entityにどのような処理を書いていくのがいいのでしょうか?
大変ざっくりとした質問で申し訳ないのですが、お時間のある方、
どうかご教授お願いいたします。

データベースにテーブルが3つあるとします。
tableA / tableB / tableC

tableA

iduriage_kubunvaluedate
1b30002017-01-02
2c10002017-02-03
3c15002017-03-04
4b18002017-04-07
5c5002017-04-18

tableB

idtableA_idvaluedate

tableC

idtableA_idvaluedate

上記テーブルAにある各レコードに対して、
uriage_kubunの値がbの場合は、tableBに
uriage_kubunの値がcの場合は、tableCに
コピー(というかinsert)をバッチ処理のように実行したいのです。

根本的かつ基本的なCakePHP3の使い方の問題ですので、
「マニュアル読めよ!」という厳しいご指摘はわかるのですが、
そこをなんとか飲み込んでいただき、ご教授いただけないかと思います。
よろしくお願いたします。

milton_rb4life👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

「それじゃフレームワークを使っている意味がないよ」という指摘を受けました。

データの操作に関わる部分を、生のSQLで書いていたり、MySQLにストアドプロシージャを書いて、
実行していたりしたためです。

この状況では、その指摘は気にしなくていいと思います。というのも、CakePHPなどのWebフレームワークは、基本的にデータ1件単位で扱うCRUD機能を便利に構築する、ということを主眼に作ってあって、データベースのバッチ処理向けというわけでは、必ずしもないからです。

DB-DBのデータ変換であれば、直接DB実行やストアドで実行のほうが向いている場合もあります(PHPで処理しようとすれば、最低限データの往復が必要となってしまいます)。

投稿2017/04/22 13:33

編集2017/04/22 13:33
maisumakun

総合スコア145184

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

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

TomoKubota

2017/04/22 13:51 編集

maisumakunさま >CakePHPなどのWebフレームワークは、基本的にデータ1件単位で扱うCRUD機能を便利に構築する、ということを主眼に作ってあって 大変わかりやすい説明で、「なるほど」と納得がいきました。 その上でなのですが、今回の「意味ないよ」の方が、「railsやcakeではDBは直接触ることはせず、構成を書くときもmigrationを利用して、フレームワーク内で全て完結させるべきだよ」と指摘してくれました。 migrationの部分はもちろん納得なのですが、この指摘を厳密にとると「フレームワークではDBに直接何か書くようなことはするなよ。全部フレームワーク内で処理内容を参照できるようにしておけよ。」ということなのかな、と勝手に受け取っております。 話が回りくどくなってしまいましたが、フレームワークの作法として以下のように認識しておけばよろしいのでしょうか。 ・全てフレームワークの中でかければそれに越したことはないのだが ・データの往復が発生してしまう処理を一度にストアドで実行できるのであればその限りではない 長々と本当にすみません・・・、あ、いや、ここで書いたこと、そのままmaisumakunさまが回答で書かれていますね。 もうベストアンサーでいいと思うのですが、もうちょっと他の方の回答を待ってみたいと思います。 本当にありがとうございました。
maisumakun

2017/04/22 13:53

直接DBを叩いてストアドを入れると、「ストアドがソース管理から抜け落ちる」という問題はありますが、マイグレーションに詰め込むこともできなくはないですので(http://qiita.com/macchaka/items/3decc5f48a15f00e188c ←こちらにあるように、任意のDDLを流すことも可能)、その問題は解消できます。
TomoKubota

2017/04/22 14:01

そうなんですね!早速読ませていただきます! もしかしたら、こちらの内容についてまたコメントさせていただくかもしれませんが、 お時間がなければ無視していただいて結構です。 ありがとうございます!
TomoKubota

2017/04/22 14:10

http://qiita.com/macchaka/items/3decc5f48a15f00e188c 急ぎで拝読いたしました。 migrationファイルにストアドを書く方法はちょっとわからなかったのですが、 方法はあるという前提で、その他のサイトを調べさせていただきます。 課題も、モデルの使い方→migrationの書き方に変わったと思いますので、この点で新たに質問が発生した場合には新しく質問を立てさせていただこうと思います。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問