第49回Php勉強会@関東 Datasource

2,785 views
2,729 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,785
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
8
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • 最近は、ほぼ二年ぶり位でPCサイトを作ってます。
  • 大体の人数をメモる
  • ModelはDBとやりとりをするものではない。
  • 標準で用意されているdatasource
    通常はここにでているRDBアクセス用のDatasourceを使ってると思います。
    dbo_sourceはRDBに共通する処理をまとめたdatasourceの親
    driver で指定したdbo_sourceが動作する
  • じゃぁ実際どんなDatasourceがあるのか。。。
    CSV 一行目を読んでフィールド定義を作ったり色々してます。
    CouchDB 去年のCakeMatsuriにも来てもらったjoel作
    mongoDB この後発表する市川さん作
  • 今回はちょっと時間がなかったので(^^;参照系のみ作ってみました。
    CakePHPだと結構簡単
    ページングは ?of=21 だけ
    ページリンクの表示は。。。
    以外に面倒
    Datasourceを使った例-1
    よく見る感じですね
    Datasourceを使った例-2
    ページ切り替えをつけてみた、tagで検索とかできるようにしてみた。
    Datasourceで実装すると いつもの db がDatasource な Model と 同じように paginator が使えます!
  • calculateはマニュアルの「実装しなければならないメソッド」
    には載ってませんが必要です
    簡単なread,writeなら必要ないですが、
    これがないとpaginateできないです。
      よね?市川さん?
  • テーブルを列挙
  • フィールドの一覧と型などのスキーマ情報を返す。

    dboではDBにDESCRIBEして取得している。
     queryLogに出てくるDESCRIBEはdboのこの部分が動いている
    ここに定義が無いと、作成、更新処理にデータが渡ってこない。
    default値を定義するとsave時に指定されていないフィールドも自動で作られる。
    created,modifiedはしていがなければ現在時刻が指定される。
  • count(*),min,maxなど特殊なqueryを定義

    通常これだけでいけるハズ
  • このうち最低一つが必要
  • モデルのインスタンスと、フィールド名、データの配列がわたってきます。

    $model->id とか $model->alias とかを使いつつデータを更新する感じです。
  • プライマリーキーを受け取れるのでそれを使って削除
  • おそらくreadが一番複雑になるし、実装しようとすると結構はまるかも

    queryDataにこんな感じのhashが入っている
    これを元にデータを取ってくる

    これはfeedに大して COUNT(*)するときのダンプです。
  • $model->findQueryType に findの第一引数で指定した検索方法が入っている
    countがちゃんと動かないとpagineteできない。
    Modelでsave(更新),delete時にはレコードの存在をチェックしているのでこれが通らないと何も動かない
    開発の最初の時はかならず 1件と返るようにしてた...(^^;
    all,firstどちらも modelでallした時と同じ形式を返す。model内でfirstの時は[0]を返してる。
  • 第49回Php勉強会@関東 Datasource

    1. 1. Datasource id:kaz_29(kaz29) 2010/1/30 49 PHP @
    2. 2. • •( ) (E2) • • • CMS • id:kaz_29(kaz29) • PHP 4 • baker
    3. 3. CakePHP
    4. 4. Datasource
    5. 5. Datasource
    6. 6. Datasource
    7. 7. Datasouce
    8. 8. Datasource • • MySQL, PostgresSQL http://book.cakephp.org/ja/view/87/DataSources
    9. 9. Datasource • app/config/database.php Database Datasource http://book.cakephp.org/ja/view/87/DataSources
    10. 10. dbo_source • RDB Datasourse • mysql,pgsql,sqlite,ms sql,oracle etc... ~/cake/libs/models/datasources
    11. 11. Datasource • CSV Datasource http://bakery.cakephp.org/articles/view/csv-datasource-for- reading-your-csv-files • Twitter Datasource http://bakery.cakephp.org/articles/view/twitter-datasource • CouchDB datasource for CakePHP http://github.com/jperras/divan/blob/master • mongoDB datasource for cakephp http://github.com/ichikaway/mongoDB-Datasource ...
    12. 12. Datasource <?php class DATABASE_CONFIG { datasource var $csv = array( 'datasource' => 'csv', 'path' => '.csv', 'extension' => 'csv', 'readonly' => true, 'recursive' => false, ); } APP/config/database.php database
    13. 13. Datasource // database <?php class User extends Model { var $useDbConfig = 'csv' ; } database
    14. 14. Datasource class FooController extends AppController { var $uses = array('User'); function index() { $users = $this->User->find('all') ; ..... } }
    15. 15. atomfeed Datasouce
    16. 16. • app/models/datasources • hoge_source.php • HogeSource • DataSource
    17. 17. Method
    18. 18. Method • listSources - • describe - • calculate - COUNT(*)
    19. 19. listSource function listSources() { return array('bookmarks') ; }
    20. 20. describe function describe(&$model) { return array( 'tag' => array( 'type' => 'string', 'null' => true, 'default' => null, 'length' => 512, ), ); }
    21. 21. caluculate function calculate( &$model, $func, $params = array()) { return array('count' => true); }
    22. 22. method • create - • update - • read - • delete -
    23. 23. • create(&$model, $fields = array(), $values = array()) • update(&$model, $fields = array(), $values = array()) $model->id $model->alias
    24. 24. • delete($model, $id = null)
    25. 25. • read(&$model, $queryData = array()) $queryData Array ( [conditions] => Array ( [feed] => http://b.hatena.ne.jp/hoge/atomfeed ) [fields] => Array([count] => 1) [joins] => Array() [limit] => [offset] => [order] => Array([0] => ) [page] => 1 [group] => [callbacks] => 1 )
    26. 26. read function read(&$model, $query) { if ($model->findQueryType === 'count') { // .... $result = array(array(array(‘count’=>$count))); } else { // .... $result = array(array($model->alias =>[ ]))); } return $result ; }
    27. 27. • 1.2 Datasource Plugin • 1.3 beta Plugin
    28. 28. Datasouce Datasouce (^^
    29. 29. >< question?

    ×