Archive for the ‘ZendFramework’ category

Zend_Form_Element InArrayバリデータ

5月 1st, 2009

Zend_Form_Elementの複数選択項目がある(Zend_Form_Element_MultiCheckboxなど)に関して標準でオプションの配列のキーに対してInArray バリデータが実行される。
・・・これっていつのバージョンからでしょうか?^^;
» Read more: Zend_Form_Element InArrayバリデータ

Zend_Db_Tableを使って新しい行を書き込み

4月 29th, 2009

Zend_Db_Tableを使って新しいフィールドを追加するときcreateRow()メソッドを使ってsave()する方法と単純にinsert()する二つの方法があります。
» Read more: Zend_Db_Tableを使って新しい行を書き込み

ZendFremeworkでCSVファイル出力

2月 5th, 2009

超ひさびさの更新です。

ダウンロードボタンを押すと、DBからCSVファイルにして出力するメモ。
» Read more: ZendFremeworkでCSVファイル出力

Zend_Mailで複数メール送信

10月 31st, 2008

複数箇所にメールを送信するとき、そのままZend_Mailで送信するとけっこう時間がかかる。
どうやらソケットをいちいちつないだりしてるかららしい。

$mail = new Zend_Mail($mailCharset);
$mail->addTo('mailaddress@xxxx.xx')
     ->setFrom('mailaddress@xxxx.xx')
     ->setSubject('title')
     ->setBodyText('body');
 
for($i=0;$i<1;$i++){
    $mail->send();
}

うちのサーバーで実行したら140秒かかった。

そこでトランスポートという機能を使う。

$transport = new Zend_Mail_Transport_Smtp('localhost');
$mail = new Zend_Mail($mailCharset);
$mail->addTo('mailaddress@xxxx.xx')
     ->setFrom('mailaddress@xxxx.xx')
     ->setSubject('title')
     ->setBodyText('body');
 
for($i=0;$i<1;$i++){
    $mail->send($transport);
}

これで5秒になった。

実際に稼動プログラムに組み込んだけどあまりスピードがあがってない。。
きっとまだ調整するところがあるんだろうな。

Zend_Mail+Smarty でメール送信

6月 9th, 2008

Zend Frameworkを使ったアプリケーションでSmartyテンプレートを使ったメール送信プログラム
よく使いそうなのでメモメモ。。

» Read more: Zend_Mail+Smarty でメール送信

Zend_Mail でシンプルなメール送信

1月 22nd, 2008

Zend_MailでもZend_Dbと同様、流れるようなインターフェイス形式でコールすることもできます。
» Read more: Zend_Mail でシンプルなメール送信

Zend_Session セッションの削除

1月 22nd, 2008

空間ごと消すのに意外と消し方がわからなかったのでメモ。
» Read more: Zend_Session セッションの削除

Zend_Db quoteInto

11月 22nd, 2007

updateでquoteIntoを使ったwhere条件が複数ある場合、記述方法をよく忘れるのでメモ。

// 複数の条件を AND で組み合わせます
$where   = array(
    $db->quoteInto('first_name = ?', $firstName),
    $db->quoteInto('noble_title = ?', $nobleTitle)
);
$count   = $db->update('round_table', $set, $where);
 
// 複数の条件を OR で組み合わせます
$firstNameOne = $db->quote($firstNameOne);
$firstNameTwo = $db->quote($firstNameTwo);
$where        = "first_name = $firstNameOne OR first_name = $firstNameTwo";
$count        = $db->update('round_table', $set, $where);

Zend_Service_Yahooをco.jpに

10月 26th, 2007

Zend_Serviceに含まれるZend_Service_YahooはAPIの飛び先がhttp://api.search.yahoo.comになっており、実際日本語サイトは全く使い物にならない。jpオプションが存在することすら疑うぐらいにw
よって改造してみたのでメモ。

» Read more: Zend_Service_Yahooをco.jpに

Zend_Db

10月 4th, 2007

ちょこっと便利そうな関数のメモ

例 10.18. 自動インクリメントのキーにおける lastInsertId() の使用法

< ?php
$db->insert('bugs', $data);
//自動インクリメントのカラムで最後に生成された値を返します
$id = $db->lastInsertId();

そのテーブルで自動インクリメントの主キーを定義している場合は、 データを追加した後で lastInsertId() メソッドを使用することができます。このメソッドは、 現在のデータベース接続において最後に自動生成された値を返します。

同じく主キー以外は
$id = $db->lastSequenceId('bugs_id_gen');
で取得できる模様

quote() の返り値には、文字列の両端に区切り文字が追加されていることに注意しましょう。 これは、たとえば mysql_real_escape_string()のようなエスケープ用関数の挙動とは異なります。

トランザクション

< ?php
//トランザクションを明示的に開始します
$db->beginTransaction();
try {
     // いくつかクエリを実行します
     $db->query(...);
    $db->query(...);
    $db->query(...);
    // すべて成功したら、トランザクションをコミットして
     // すべての変更を一度に適用します
     $db->commit();
}
catch (Exception $e) {
    // いずれかのクエリが失敗して例外が発生したら、
     // もし他に成功しているクエリがあったとしても
    // それも含めてすべての処理をロールバックします。
    // すべて適用されるか、ひとつも適用されないかのいずれかです。
    $db->rollBack();
   echo $e->getMessage();
}

Zend_Db_Selectオブジェクト

メソッドを使用して句を追加する例

< ?php
// Zend_Db_Select オブジェクトを作成します
$select = $db->select();
// FROM 句を追加します
$select->from( ...テーブルとカラムを指定します... )
// WHERE 句を追加します
$select->where( ...検索条件を指定します... )
// ORDER BY 句を追加します
$select->order( ...ソート条件を指定します... );

また個々の句に対してメソッドが用意されている。
from()
join()
where()
orWhere()
group()
having()
order()
limit()
limitPage()
distinct()
など

< ?php
// できあがるクエリは、このようになります
//   SELECT p."product_id", p."product_name"
//   FROM "products" AS p
//   LIMIT 10, 20
$select = $db->select()
    ->from(array('p' => 'products'), array('product_id', 'product_name'))
    ->limitPage(2, 10);

使いこなせば便利そう・・・使い慣れない間はSQLをそのまま記述したほうが早そう・・・^^;
具体的な使用例は使いながらUPしていくつもり。