symfony初めまして。社内にいるほとんどのプログラマーがpropelの中いきなりdoctrineを学んだピチピチ平成生まれ(20歳)、新卒のitaniです。symfonyを学んだときに、こんな記事があったらいいなぁと思ったので書くことにしました。いうわけで、symfonyを触ってまだ間もない僕が、今回はdoctrineを使ってDBの基本操作を紹介します。※symfonyのversionは1.4を使用します。DBの準備まずはDBの準備をします。symfonyを使ってDBを作るにはまずスキーマを作らなければいけません。スキーマを作る方法は2つあります。1、自分でschema.ymlを書くconfig/doctrine/schema.ymlにテーブルの構造をYAMLフォーマットで書きます。true}2、DBにテーブルを作った後、schema.ymlを生成まず、自分でテーブルを作り、その構造に応じてsymfonyが自動でschema.ymlを作ってくれます。1、2ともにschema.ymlを生成した後はmodelを生成します。symfonyでDBを扱うにはこのmodelが必要不可欠です。modelを生成すると、lib/model/doctrine以下にテーブルに関する3種類のphpファイルが生成されています。User.class.phpUserTable.class.phpBaseUser.class.phpBaseのファイルはsymfonyがコマンドによって勝手に書き換えてくれたりするので触らなくていいです。重要なのは他の2つです。基本的には2つともUserテーブルに関連しているファイルなんですが、大きな違いが2つあります。Tableがついていない方(User.class.php)のオブジェクトは、そのテーブルの1つのレコードを表します。Tableがついている方(UserTable.class.php)は、userオブジェクトに対してのメソッドを定義します。この違いは最初の内はよくわからないと思います。僕もそんなに理解していません。僕はこんな風に覚えました。Tableがついていない方は、1つのレコードを扱ったりするときに使う。Tableがついている方は、DB関連の処理をまとめてするときに使う。感じ方としてはざっくりこんな感じでいいんではないでしょうか?テスト用DB今回のブログを書くにあたって使用するDBです。検索doctrineでselect文を書くときは2つの方法があります。1つ目は、自分でDoctrine_Queryを書く方法です。'hoge');whereを複数指定するときはandWhere()を使います。1つの方法が、finderメソッドです。finderメソッドは、バックグラウンドでDoctrine_Queryオブジェクトを自動的に作成します。これを使えばたった1行で、レコードを検索して取り出すことができます。find()は主キーによる検索。findOneBy()とfindBy()は指定したカラムによる検索です。Doctrine::getTable('User')->findByAge(20);追加doctrineはレコードの追加のための、便利なsave()メソッドを用意してくれています。追加したいテーブルのClassを宣言した後に、setメソッドで、カラムに与えるデータを示します。最後にsave()メソッドにより、セットされた値でINSERTされます。$q->save();これでレコードが新しく追加されています。このsave()メソッドはこれだけではありません。便利な機能を実装してくれています。テーブルにレコードを追加する時は、まず最初に重複しないかどうか、SELECT文をかけるのがセオリーです。save()メソッドはそれを判断して、重複していない新たなレコードならINSERT。レコードがあった場合はUPDATEと使い分けてくれるのです。//id=1のレコードを検索。あればnameを更新。なければid=2で追加。->execute();これでテーブルからレコードは削除されています。クエリを実行してデータを読みとる実際にクエリを実行してデータを読み取る時によく使うのはこの2つ。最初はこれだけおさえとけばいいと思います。ものすごくざっくりDBを使うときの基本的な動き、SELECT・INSERT・UPDATE・DELETEについて書いてきました。doctrineはpropelと比べると、sqlを直感的にイメージできるからわかりやすいですね。最後に今回書いたdoctrineは、moduleのactionsに書けば普通に動きます。それだとactionsのソースは得てして読みにくいものになってしまいます。symfonyを使った基本的なDBの扱いの流れは、modelにメソッドを作り、actionsでメソッドを読み込み、結果をtemplateに渡してあげます。具体的な例をあげてみます。}//実行結果hogefugaこの流れがMVCパターンと呼ばれるものです。sqlを実際に実行するのはactionですが、どんなsqlかを記入するのはmodelです。templateはただその結果を表示するのみです。12:00初心者による初心者のためのdoctrineTweet関連記事2019-12-20GoのDBライブラリと俺たち、それからsqlla年末ですね。~この記事はカヤックアドベントカレンダー19日目の記事です。は...2010-10-09symfonyとHyperEstraierを使って全文検索してみようはじめまして。インターンのsato(@hilotter)です。-お久しぶりです!夏季休暇真っ最中のitani(@w650)です。実装するときのポイントいくつか最近はまんぐうん家にいます。(1)月別アーカイブ検索スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。