Doctrineではじめるsymfony1.2開発
Upcoming SlideShare
Loading in...5
×
 

Doctrineではじめるsymfony1.2開発

on

  • 9,429 views

 

Statistics

Views

Total Views
9,429
Views on SlideShare
9,032
Embed Views
397

Actions

Likes
6
Downloads
16
Comments
0

7 Embeds 397

http://webmemo.uzuralife.com 324
http://www.slideshare.net 42
http://d.hatena.ne.jp 9
http://webcache.googleusercontent.com 9
http://s.deeeki.com 6
http://www.slideee.com 6
http://www.sfexception.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Doctrineではじめるsymfony1.2開発 Doctrineではじめるsymfony1.2開発 Presentation Transcript

  • Doctrine ではじめる symfony1.2 開発 第 2 回 symfony 勉強会 小川 雄大
  • 自己紹介
    • 名前: 小川雄大
    • 所属: アシアル株式会社
    • PHP暦: 2年弱
    • H.N.:  fivestar
      • http://d.hatena.ne.jp/Fivestar
      • http://wassr.jp/user/fivestar
  • アジェンダ
    • Doctrine の特徴
    • Propel との比較
    • symfony 1.2 + Doctrine
    • TIPS+
    • Doctrine 2.0
  • Doctrine の特徴
  • その前に
  • Doctrine 使ったこと ありますか?
  • Doctrine の特徴
    • DQL
      • SQL に近い感覚でクエリをかける
      • Hibernate の HQL にインスパイア
    • PDO
      • PHP 5.2.3 以上
    • 日本語のドキュメントあり
      • http://www.doctrine-project.org/
  • DQL
    • D octrine Q uery L anguage
      • 正確にはDoctrine用のSQL
    • DQLを生成するためのインターフェイスが Doctrine_Query オブジェクト
    • 間違ってもDQNではない
    • この後Propelと比較しながら説明
  • Propel との比較
  • Propel との比較
    • Propel 1.3 / Doctrine 1.0
    • CRUD
    • 生SQL
    • クラスの違い
  • CREATE
  • CREATE
  • RETRIEVE
  • WHERE id = 1
  • WHERE id = 1 AND title LIKE '%symfony%'
  • WHERE id = 1 OR title LIKE '%symfony%'
  • WHERE id IN (1, 2, 3)
    • NOT INの場合は Criteria::NOT_IN / whereNotIn()
  • LEFT JOIN
    • INNER JOINの場合は Criteria::INNER_JOIN / innerJoin()
  • ORDER BY price DESC LIMIT 5 OFFSET 10
  • UPDATE
  • UPDATE
    • 基本的にCREATEと同じ
    • 複数のレコードを一度に更新したい場合
      • Propel: BasePeer::doUpdate
        • 割愛
      • Doctrine
        • プレースホルダを使用したい場合は set(array($key, $value)) のように配列で指定
  • DELETE
  • DELETE
  • 生 S QL
  • 生 SQL
    • あとはPDOStatementを好きなように
      • PropelだとArticlePeer::populateObjects($stmt)
  • クラスの違い
  • BaseObject / Doctrine_Record
    • Propel
      • BaseObject
      • モデル生成時にメソッドを作成し、 静的 に呼び出し
      • $article->getTitle();
    • Doctrine
      • Doctrine_Record
      • メソッドは__callで 動的 に呼び出し
      • $article->getTitle() / get('title') / title / $article['title']
        • getTitleが実装されていれば呼び出し / それ以外はget('title')に
  • BasePeer / Doctrine_Table
    • Propel
      • BasePeer
      • クラスメソッド
      • ArticlePeer::doSelect(new Criteria())
    • Doctrine
      • Doctrine_Table
      • インスタンスメソッド
      • Doctrine::getTable('Article')->findAll()
      • findOneByIdなど動的に実行
  • Doctrine_Collection
    • Propel
      • is_array ($articles)
        • $articles[0]
    • Doctrine
      • $articles instanceof Doctrine_Collection
        • ArrayIteratorを実装したクラス
        • $articles->getFirst() / ->get(0) / $articles[0]
        • $articles->count()
  • symfony 1.2 + Doctrine
  • symfony 1.2 には はじめから Doctrine が 入ってます
  • databases.yml
    • classを sfDoctrineDatabase に
    • doctrine.ini
      • ありません
  • ProjectConfiguration
    • sfDoctrinePluginを読み込むよう設定
    • 必要に応じてconfigureDoctrineで設定変更
  • 後はコマンドラインで
    • symfonyコマンドにdoctrineがでてくるはず
    • config/doctrine/schema.ymlを作成
    • 後はモデルやフォームを作成
      • $ symfony doctrine:build-all
        • lib/model/doctrine
        • lib/form/doctrine
    • まずはCRUDをみてみるといいかも
      • $ symfony doctrine:generate-module
  • TIPS+
  • オブジェクトのダンプ
    • Record / Collection共にかなりのデータ量
    • var_dump($article) とかマジ危険
    • 配列にしてしまえばOK
      • $record-> toArray ()
      • $collection-> toArray ()
    • ダンプ用のメソッドも
      • Doctrine_Lib::getRecordAsString($record)
      • Doctrine_Lib::getCollectionAsString($collection)
  • 配列から取り込み
    • $record-> fromArray ($values)
    • $values = array(フィールド名 => 値, …)
    • 新規作成と同時に行いたい場合
      • Doctrine::getTable('Article')->create($values)
    • IDなども上書きされるので注意
  • フックメソッド
    • 一覧
      • pre/postSave
        • pre/postInsert
        • pre/postUpdate
      • pre/postDelete
      • pre/postDqlSelect
      • pre/postDqlDelete
      • pre/postDqlUpdate
    • Tableクラスに記述
  • テンプレート
    • Propelのbehavior
    • デフォルトでいくつか用意されている
      • Timestampable
        • created_at / updated_atの自動更新
      • SoftDelete
        • 論理削除
    • アシアルブログを参照
      • http://blog.asial.co.jp/475
      • http://blog.asial.co.jp/408
  • Doctrine 2.0
  • Doctrine 2.0
    • 構造や実装が一新
    • DBAL層とORM層を明確に分離
    • いくつかの主要クラス名が大幅に変更
      • Doctrine_Record => Entity
      • Doctrine_Table => Repository, Manager
    • namespaceの採用
  • Doctrine 2.0
    • 左が1.1のbranch
    • 右がtrunk(2.0)
  • Doctrine 2.0
    • リリースはまだまだ先の話
      • Trac上では2009年9月1日予定
    • 詳しくは本家Wikiを参照
      • http://trac.doctrine-project.org/wiki/Doctrine2.0
  • ぜひ皆さんも Doctrine 使ってみましょう。
  • ご静聴ありがとうございました 小川雄大 (a.k.a fivestar)