[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
http://www.symfony-project.org/doctrine/1_2/ja/06-Working-With-Data
共通のAPI
| 関数名 | SQL | append | 説明 |
|---|---|---|---|
| where('u.username = ?', 'jwage') | u.username = ? | No | WHEREを設定して既存のWHERE<条件をオーバーライドする |
| andWhere('u.username = ?', 'jwage') | AND u.username = ? | Yes | ANDでappendされるWHERE条件を追加する |
| whereIn('u.id', array(1, 2, 3)) | AND u.id IN (?, ?, ?) | Yes | appendされるAND IN WHERE 条件を追加する |
| andWhereIn('u.id', array(1, 2, 3)) | ^ | Yes | whereIn()用のコンビニエンス/プロキシメソッド |
| orWhereIn('u.id', array(1, 2, 3)) | OR u.id IN (?, ?, ?) | Yes | appendされるOR IN WHERE条件を追加する |
| whereNotIn('u.id', array(1, 2, 3)) | AND u.id NOT IN (?, ?, ?) | Yes | appendされるAND NOT IN WHERE条件を追加する |
| andWhereNotIn('u.id', array(1, 2, 3)) | ^ | Yes | whereNotIn()用のコンビニエンス/プロキシメソッド |
| orWhereNotIn('u.id', array(1, 2, 3)) | OR u.id NOT IN (?, ?, ?) | Yes | appendされるOR NOT IN WHEREの条件を追加する |
| orWhere('u.username = ?', 'jwage') | OR u.username = ? | Yes | OR、WHERE条件を追加する |
| groupBy('u.id') | GROUP BY u.id, u.username | No | GROUP BYを設定して既存のGROUP BYをオーバーライドする |
| addGroupBy('u.username') | GROUP BY u.username | Yes | appendされるGROUP BYを追加する that is appended |
| having('num_phonenumbers > 0') | HAVING num_phonenumbers > 0 | No | HAVINGを設定して既存のHAVINGをオーバーライドする |
| addHaving('u.username = ?', 'jwage') | HAVING u.username = ? | Yes | 追加されるHAVINGを追加する |
選択のAPI
| 関数名 | 説明 |
|---|---|
| distinct($flag = true) | フラグをdistinct selectに設定する |
| select('u.id, u.username, COUNT(p.id) as num_phonenumbers') | SELECTを設定して既存のSELECTをオーバーライドする |
| addSelect('u.email_address') | appendされるselectを追加する |
| from('User u, u.Phonenumber p') | FROMを設定して既存のFROMとjoinをオーバーライドする |
| leftJoin('u.Phonenumber p') | FROMにappendされるLEFT JOINを追加する |
| innerJoin('u.Profile p') | FROMにappendされるINNER JOINを追加する |
| addFrom('u.Phonenumber p') | FROMにappendされるFROM joinを追加する |
| orderBy('u.username') | ORDER BYを設定して既存のORDER BYをオーバーライドする |
| addOrderBy('u.is_active = ?', 1) | appendされるORDER BYを追加する |
| limit(20) | 結果セットを制限するレコードの数を設定する |
| offset(5) | レコードの制限をオフセットする番号を設定する |
更新API
| 関数名 | 説明 |
|---|---|
| forUpdate($flag = true) | FOR UPDATEを使うためにクエリを変更する |
| update('User u') | UPDATEするモデルの名前を指定する |
| set('u.username', '?', 'jwage') | UPDATEクエリのために新しい値を設定する。最初の引数は修正するデータで、2番目はDQLの文字列に直接加える式(もしくはDBMS関数)、で3番目は新しい値。 |
削除API
| 関数名 | 説明 |
|---|---|
| delete() | 削除するクエリを変更する |
例:
(MySQL)
SELECT i.name FROM item i WHERE i.id=3↓↑
(Doctrine)
<?php
$table = Doctrine_Query::create()->select('i.name')
->from('Item i')
->where('i.id = ?', 3)
->execute();又は、Doctrineでwhere句を書かずに
$table = $table -> getId(3);とかでもいけるかもしれません。(うろ覚え)
ということで、調べたわけではないけれど、きっとこんな感じなのだろうと思ったことをまとめます。
・クラスを表す場合はファイル名を~.class.phpにする
・Javaと書き方はほとんど同じ
public class クラス名
{
・・・
} ・メソッドはなぜかfunction宣言(method宣言ではない)
public function メソッド名
{
・・・
} ・フィールドを持てるか不明
$this->変数名
が変数名なのかも・・・・Cライクでアロー演算子(.で繋がない)
$q = $this->getQuery() ・継承可能。implementsはできるか不明
public class クラス名 extends 親クラス名
{
・・・
} ・staticあり。スコープとの順序は気にしなくていいらしい
static public getSource()
{
・・・
}
とりあえずこんな感じ!!
僕はとにかくPHPが嫌いです!
いきなり何やねん!って話ですが・・・
僕は元々、Java勉強してた人間なので、いかんせんPHPに慣れません。むしろ、嫌いに近いです。
ということで、僕の嫌いなPHPを紹介したいと思います。
1.変数に宣言がない
PHPでは変数は$で表し、書く側としては型なんて考える必要がなさそうです。(プログラム側としては認識しているかもしれないですが・・・)
いつでもどこでも変数は$なので、既存の変数なのか新規の変数なのかもサッパリ。
たとえば以下
<?php
$change = "変更前です";
$chenge = "変更後です";
print($change);
?>
おっと。
二行目で変数名のaとeを間違えてしまいました。
PHPだと、こういったミスをしたときにエラーを返してくれないのでツラいです。
これをJavaで書くとすればこんなでしょうか。
public static void main(String[] args) {
String change = "変更前です";
chenge = "変更後です";
System.out.print(change);
余裕で3行目でエラーを返してくれます。(chengeが解決できない)
プログラマ想いの言語ですよね。
2.{}の位置が嫌い
これはPHPだから!という話ではなくて、どの言語でも当てはまるのですが、
現在Symfonyを使っていて、コーディング規約で以下があるんです。
・{は行の始めに書くこと
つまり、こんなカンジです。
<?php
public function func()
{
・・・
}
?>
僕は本当にこの書き方が大っ嫌いなんです。見づらくて仕方がない。やっぱ、こう書きたいですよね。
<?php
public function func() {
・・・
}
?>
3.条件文の中で代入できる
これはC系にも当てはまることですが、以下が可能です。
if($buf = $query)
つまり、bufにqueryを代入して、その中身があったらtrueを返すってこと。
1行の中で二つのことをしていて、わかりづらいです><
Javaでは多分こんなことできません。
String buf = query;
if(!buf.equals(""))
PHPってめんどくさいよねー。