こんにちは。実務で Phalcon を使っています。 今回は Model にペタッとアタッチして使うビヘイビアについて書いてみます。 ビヘイビアとはなにか Phalcon\Mvc\Model は onConstruct や beforeSave, afterSave といったイベントをハンドルすることができます。永続化が実行される直前、直後でなにかを実行したい場合に便利です。 これらのイベントハンドラを使うことで、たいていのことはできます。 例えばレコードの作成日時と更新日時を記録するには以下のように書きます。 class BlogEntry extends \Phalcon\Mvc\Model { public $created_at; public $updated_at; public function beforeCreate() { $this->created_at = dat
サンフランシスコのプログラマLaurie Voss氏が書いた見逃せない記事が賑わっています。近年のフレームワークやライブラリの定番中の定番ORマッパーが既にアンチパターンなのではというのが彼の主張です。この記事を書くきっかけになったのはこのツイートだそうです。 I cannot overstate the degree to which ORM is a dangerous antipattern. — Laurie Voss (@seldo) June 9, 2011 ORM が危険なアンチパターンだっていうのはどれだけ言っても言い過ぎることはない このツイートに対して各方面(ActiveRecord, Doctrine, Hibernate)から多くの(激しい)返信が寄せられて書かれたのが問題のエントリです。まずはアンチパターンとは何かの定義として下記の2つを挙げています。 当初は有益
ORMのObserver_Typingについて簡単に説明すると、テーブルのカラムを増やさなくとも1つのカラムにシリアライズまたはJSONなどの文字列として保存することで、保存や取得を自動で行ってくれるものです。 例えばこのようなusersテーブルがあるとします。CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `profiles` text NOT NULL, `created_at` int(11) DEFAULT NULL, `updated_at` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB;nameとprofilesというカラムがあります
手書きからコード自動生成へ - Scaffold(Model)編 Scaffoldにより自動生成された、 /fuel/app/classes/model/testscaffold.php を解析していきます。 まず「名前空間」。超重要です。 ※ これは、FuelPHPの機能ではなく、PHPそのものの機能です。 コードの先頭で、 use Orm\Model としているため、この時、継承している「Model」は、 あの空っぽのModel(/fuel/core/classes/model.php)ではなくて、 /fuel/package/orm/classes/model.php です。 これは、あとで、delete()メソッドが使えることからもわかります。 その後、クラス定義の前半は、 自動コード生成のための補習 - Model編 - きまブログ での解析内容と同じ。 データベースのカラム名の
手書きからコード自動生成へ - Model編 Modelは、コード自動生成しようとすると、データベースとの連携を考慮したファイルを生成します。 $ oil generate model testtable2 name:text Creating model: /home/kima/test_app/fuel/app/classes/model/testtable2.php Creating migration: /home/kima/test_app/fuel/app/migrations/001_create_testtable2s.php 2つのファイルが生成されました。 testtable2.php は、モデルです。内容は、あとで解析しますw 001_create_testtable2.php は、 マイグレーションという、データベースを操作するためのファイルです。 ここでは、ファイ
Eloquentは遅いのか Posted: 2014-10-28 00:12 | PHP全般 気になったのでやりました 同じテーマで海外のエンジニアの方が書いていたので、 実際にマイクロベンチマーク的にデータ挿入にかかる時間を調べてみました。 PCや色んな環境によって多少誤差もありますし、 結果がどうあれ好きなものや、使いやすいものを使えば良いだけです。 気になったので実際にやってみただけです 計測したマシンは自宅のMac pro(ゴミ箱の前のやつ) 2.8 GHz Quad-Core Xeon 16GB 1066 MHz DDR3 PHP 5.5.10 (cli) with Zend OPcache v7.0.3 MySQLは 5.5.34 です 利用したスキーマはシンプル -- mysql schema. CREATE TABLE `performances` ( `id` int(1
ずーーーっとネイティブ開発ばかりして来たエンジニアが社内の都合でウェブ系の開発現場に放り込まれて色々解決した記録を残しておくチラ裏的なモノ。
24. FuelPHP結果 DBアクセス 時間(マイクロ秒) メモリ(bite) 標準DB 104,539 11,294,944 PDO 156,635 17,780,272 ORM 779,926 11,155,696 DBアクセス 時間(マイクロ秒) メモリ(bite) 標準DB 87,393 9,822,952 PDO 139,650 16,569,016 ORM 744,167 9,477,896 OPcache Off OPcache On 25. Phalcon結果 DBアクセス 時間(マイクロ秒) メモリ(bite) PDO 11,521 4,428,728 PHQL 47,367 6,723,480 ORM 46,287 6,721,464 SimpleQuery 45,182 6,702,584 DBアクセス 時間(マイクロ秒) メモリ(bite) PDO 10,921
「最速」PHPフレームワークPhalconのモデルについて、基本事項をまとめます(公式ドキュメントの翻訳+αです)。記事執筆時のPhalconのバージョンは1.3.1です。なお、サンプルコードを実行したい場合、環境構築を参考にしてください。 モデルの基本 Phlaconのモデルは、Phalcon\Mvc\Modelを継承したクラスです。モデルクラスは以下の条件を満たす必要があります。 modelsディレクトリに配置する モデルファイルは1つのクラスだけを含む クラス名はキャメルケース <?php class Robots extends \Phalcon\Mvc\Model { } 上記例が、Robotsモデルの実装例です。RobotsがPhalcon\Mvc\Modelを継承している点に注目してください。Phalcon\Mvc\Modelを継承することで、データベースにおいて基本的なCR
概要 ある条件に当てはまるイベント情報をviewに表示したい 条件は"公開が許可されているか"、"期限範囲内か"、"特定のイベントタイプ" この"特定のイベントタイプ"を複数にしたいときにどうするか 以下にORMモデルのコントローラーの例 $events = Model_Event::find("all",array( "related" => array("eventtype"), "where" => array( array("is_available","1"), array("is_public","1") , array("event_type_id","3") ), 'order_by' => array('orders' => 'asc'), )); $events = Model_Event::find("all",array( "related" => array("e
BEAR.SundayでDoctrine2のORMを使ってみた http://qiita.com/77web@github/items/7b67e490ac59dcab0ca8 の続き。 前回はDoctrine2のORMを使ってDBデータを取得するところまでで終わった。 せっかくだから、今度はDBにデータを保存してみたい。 AppResourceにonPost()を追加 まずは前回のMy\NoteApp\Resource\App\Noteに新規登録用のonPost()を追加。 // src/Resource/App/Note.php namespace My\NoteApp\Resource\App; use BEAR\Resource\ResourceObject; use Doctrine\ORM\EntityManager; use My\NoteApp\Entity\Note as
77webさんの「BEAR.SundayでDoctrine2のORMを使ってみた」を試しつつ、少しだけ改良してみます。 BEAR.Sundayのインストール ベンダー名はMy、アプリケーション名はNoteとします。これらの指定は名前空間で使われます。 $ composer create-project bear/skeleton My.Note dev-develop $ cd My.Note $ composer install なお、ここではdev-developを指定して開発ブランチ(developブランチ)をインストールしています。 Doctrineのインストール $ composer require 'doctrine/orm:2.4.*' データベース接続設定 BEAR.Sundayではデータベース接続設定はvar/conf/constants.phpで定義します。 具体的には
// src/Resource/App/Note.php namespace My\NoteApp\Resource\App; use BEAR\Resource\ResourceObject; class Note extends ResourceObject { public function onGet($id) { $note = $this->entityManager->find('...', $id); $this['note'] = ['body' => $note->getBody()]; return $this; } } Providerを書く ワークショップのMonologProviderと同じように、Doctrine\ORM\EntityManagerを作ってくれるProviderを作ることにした。 mysql環境を作るのが面倒なので仮でsqliteで。 DBファ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く