Model#save()でUPDATE文が発行される際は、まず該当ID(primary key)がDBに存在するかを確認するSELECT文が発行されて、存在すればUPDATE文が発行されます。 1レコードだけを更新するなら特に気にする必要は無いのですが、大量のレコードを逐次UPDATEする際はこのSELECT文を抑制したくなります。 そこでこのSELECT文を抑制する方法を調べてみました。 1. Model#$__exitstsにtrueを入れる ちょっと強引な方法ですが、save()を実行する直前でModel#$__exitstsにtrueを入れると、SELECT文が発行されません。 Model#$__exitstsはsave()実行後、nullにリセットされるので元の値を戻す必要はありません。 // FooがModel $this->Foo->__exists = true; $thi
このタイトルだと、たいていmodel::create()してるか、してないかで、model::save()時に実行されるSQLがINSERTかUPDATEに分岐する問題なんですが、今回、はまった問題は、この問題ではありません。 処理の流れ的には、 model::set($data); model::save(); といたって、(cakephp的に)普通にレコードの更新を行うもので、 問題はUPDATEして欲しいのに、INSTERTしてしまうというもの。 で、メッセージで、プライマリーキーに設定してるフィールド(id)の値が衝突するためINSERTが失敗しましたとか、表示される。 ん〜、そもそもUPDATEして欲しいのに、INSERTしてるのが、わからない。 実行されたSQLを見てみると、確かにUPDATEではなく、INSERTしてしまってました。 で、さくっと原因を言うと、idの値に0を使
このドメインは お名前.com から取得されました。 お名前.com は GMOインターネットグループ(株) が運営する国内シェアNo.1のドメイン登録サービスです。 ※表示価格は、全て税込です。 ※サービス品質維持のため、一時的に対象となる料金へ一定割合の「サービス維持調整費」を加算させていただきます。 ※1 「国内シェア」は、ICANN(インターネットのドメイン名などの資源を管理する非営利団体)の公表数値をもとに集計。gTLDが集計の対象。 日本のドメイン登録業者(レジストラ)(「ICANNがレジストラとして認定した企業」一覧(InterNIC提供)内に「Japan」の記載があるもの)を対象。 レジストラ「GMO Internet Group, Inc. d/b/a Onamae.com」のシェア値を集計。 2023年5月時点の調査。
知識1 リソースとイベントの分け方 イベントとリソースを分けているのは「〜する」という言葉を付けて成り立つかどうかです。 つまり「受注+する」は言葉として成り立つのでイベント。しかし「商品+する」は成り立たないのでリソース。 他には、「イベントには年月日などのタイムスタンプが含まれるが、リソースには含まれない」という見方で切り分けても良いです。 これによって細分化されたリソースは、リソースの中にリソースが含まれることはなく、独立した存在となります。 リソースとリソースとの関係表現には、必ず「対照表」というものが使われます。 つまり[従業員]というリソースに、[所属部門]というリソースが含まれることはなく、[従業員:部門 対照表]によって「配属」が表現され、組織構造が変わった場合や人事異動の場合にも、この対照表だけをメンテナンスすることで、[従業員][部門]ともに安定した(Sta
先ごろ開かれたRailsConfでは、オープニングキーノートにおいてPragDaveが「Railsでは解決できない事項」に焦点をあてていた。その中にはエンタープライジーなことも含まれていた。たとえば、複合キーを持つような、様々なデータ構造を扱うことが必要だというのだ。 これに対するDHHの反応は、この上なく痛烈な拒絶であった。 Martin Fowler's Bliki in Japanese - エンタープライズRails ここでいう「複合キー」が何を指すのか、はっきりとは書いてありませんが。リレーショナル・データベースのテーブルが持つ、「複数列で構成される主キー」ということにして、複合キーの必要性について、考えてみます。 まず、複合キーが「必要とされる」状況を、3点挙げてみます。 --- 1) 階層構造を表現したい これはすぐに否定できますね。 単一の主キーと外部キーの関連を使って、階
http://www.martinfowler.com/bliki/EnterpriseRails.html Railsのコミュニティでは「エンタープライズ」という言葉がダーティーワードになりつつある。 多くの人にとってRailsフレームワークとは、貪欲にシンプルさを備えたものであり、複雑になり過ぎた「エンタープライジー」なフレームワークへのアンチテーゼなのだ。 先ごろ開かれたRailsConfでは、オープニングキーノートにおいてPragDaveが「Railsでは解決できない事項」に焦点をあてていた。 その中にはエンタープライジーなことも含まれていた。 たとえば、複合キーを持つような、様々なデータ構造を扱うことが必要だというのだ。 これに対するDHHの反応は、この上なく痛烈な拒絶であった。Wired誌*1の表紙になった画像をうまく編集して、DHHは自らをソフトウェア界のネオ(救世主)として
おぉ、ガチだ。 [RDBMS]複合主キー? 18:57 ・・・まだそんなこと言ってる人いるのか。 id等の単一のサロゲートキーを導入して逃げることも可能ではあるが、そのために仕組みが複雑になることが避けられない。 いや、お互いものすごく優秀で有名な方だし大人なのでガチの勝負はしてくれないとは思うのだけれど、ぜひ世の多くのさまよえるSEのためにガチンコ勝負して決着つけてくれんかなぁ。てゆうか、今回の案件でもID派(=私)と複合主キー派(=モデラー)でもろに喧嘩してるし、前のプロジェクトでも他の人が同じようなことやってたし、さらに前の案件でも(w そろそろ、IDを使うべきかそうでないかくらいベストプラクティスを決めてほしいなぁと思う今日この頃*1。 たしかにDB直接見て何かするような運用だと、複合主キーの方がわかりやすかったりするのはたしか。でも複雑なシステムで他のテーブルへの関連が沢山あるよ
Sebastian Bergmann が公開している PHPUnit Pocket Guide の日本語訳です。 2006/08/09 追記: 本家 のほうでも日本語版が見られるようになりました。 m-takagi.org は非常に貧弱な回線で運用しており、 頻繁に落ちています :-( ので、ここがつながりにくい場合は本家のほうを参照ください。 PHPUnit 3.3 日本語 English PHPUnit 3.2 日本語 English PHPUnit 3.1 日本語 English PHPUnit 3.0 日本語 English PHPUnit 2.3 日本語 English Deutsch
1.1系ではModel::generateList()メソッドを使えば、モデルから指定した列のkeyとvalueがペアとなった配列が取得でき、selectタグを作るのに便利でした。 1.2系ではそのgenerateList()は非推奨メソッドとなり、 「1.2系ではgenerateList()の代わりにModel::find('list')を使う」 という情報は色々なところで見つかったのですが、keyとvalueに使われる列を自分で指定する方法が分からなかったので調べてみました。 今回分かったのは2通りのやり方です。(Beta 1.2.0.6311で確認) 方法1:displayFieldプロパティを設定して、Model::find('list')を呼ぶ方法 こちらの方法はkeyに使われる列はモデルの主キー(通常であれば'id')固定になります。 モデルのdisplayFieldプロパティ
はてなブックマークのAtomAPIの概要と、アクセスに必要な環境 今回は、「RESTなWebサービスの利用/開発」の第3回として、より本格的にWebサービスにアクセスする例を紹介します。RESTなWebサービスの1つとして、はてなブックマークの「AtomAPI」を例に取り上げ、Web開発用の簡易スクリプト言語であるPHP(PHP:Hypertext Preprocessor)を使ってブックマークの追加/編集/削除を行う方法を解説します。 AtomAPIは、ブログなどのWeb上の情報を、Webアクセスに用いられるHTTP(Hypertext Transfer Protocol)を通して編集するためのプロトコルです。AtomAPIは通称で、正式には「The Atom Publising Protocol」(略称はAtomPub)と呼びます。 AtomAPIでは、一般にはRESTの形式で通信を行
New CakePHP 5.0 Chiffon. Faster. Simple. Delicious. What's new in version The migration guide has a complete list of what's new in. We recommend you give that page a read when upgrading. A few highlights from 5.0 are: PHP 8.1 required. Improved typehints across the framework. CakePHP now leverages union types to formalize the types of many parameters across the framework. Upgraded to PHPUnit 10.x
タイトルながくなってしまった。 CakePHP勉強会に参加するので俺だってCakePHPくらい使えるんだぜー!という所を。 はじめに 私が動かしてるブログシステムをCakePHPで書き直すとしたらどうするのかな。という事をやっていきます。 CakePHPって独自ルールが多いから新規開発は早くても既存システムに食い込むのは難しいんじゃないの?みたいな疑問を払拭していきたい。 インストールと設定 donate,donateってうるせー! 今回は1.2.0.7125-rc1を使いました。新しいのか古いのかしらない。 http://cakeforge.org/frs/download.php/626/cake_1.2.0.7125-rc1.tar.gz/donation=complete ダウンロードして解答します。そしたら chmod -R 777 app/tmp してtmpディレクトリに書き込
2010年4月6日、Twitterは独自に開発した分散フレームワーク「Gizzard」をGitHubにオープンソースとして公開しました。Gizzardは「シャーディング」と呼ばれる、1台に格納するとパフォーマンスに影響を及ぼす大容量なデータベースを複数台に分割することで解決を図る手法をサポートするフレームワークです(図1)。TwitterのバックエンドにScalaが使われていることが以前話題となりましたが、このGizzardもScalaで書かれています。 図1 Gizzardのシステム構成モデル 出典:http://github.com/twitter/gizzard Gizzardはミドルウェアとして動作し、RailsやPHPなどで動くWebフロントエンドからのリクエストを受け取り、My-SQLやRedisのようなインメモリDB、Luceneなど各種データストアへ渡します。Twitt
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く