- 2022.03.28 Monday
- スポンサーサイト
-
一定期間更新がないため広告を表示しています
- | スポンサードリンク | - | | - | - | pookmark |
- 2014.11.18 Tuesday
- php Laravelフレームワークごにょごにょやるうえで勉強したことをつらつらと001
-
php Laravelフレームワークごにょごにょやるうえでしらべたことをつらつらと
ーーーーーーーーhttp://www.ospn.jp/press/20140605no40-useit-oss.htmlーーーーーーーーーーーーーー
6.モデルについて
モデルには
1、エロクアント(Eloquent)、
2、クエリービルダーと
3、ベーシックなクエリーの
3種類あって
ベーシックなクエリーは下記の様な発行方法です。
■SELECT
DB::select('select * from users where id = ?', array(1));
■INSERT
DB::insert('insert into users (id, name) values (?, ?)', array(1, 'Dayle'));
■UPDATE
DB::update('update users set votes = 100 where name = ?', array('John'));
■DELETE
DB::delete('delete from users');
いずれもプリペアドステートメントを使用して
各クエリーを発行する形式になっています。
プリペアドステートメントとは? 実行したい SQL をコンパイルした 一種のテンプレートのようなものです。
解析/コンパイル/最適化 の繰り返しを避けるので高速に動作するということです。
(http://php.net/manual/ja/pdo.prepared-statements.php)
クエリービルダーでは以下の様になります。
■SELECT
DB::table('users')->where('id', 1)->first();
■INSERT
DB::table('users')->insertGetId(['id' => 1, 'name' => 'Dayle']);
■UPDATE
DB::table('users')->where('name' => 'John')->update(['votes' => 100]);
■DELETE
DB::table('users')->where('name' => 'John')->delete();
複数の検索条件が必要な場合はwhereを複数記述することで、
内部でANDへと変換されます。
エロクアントは、より洗練されたORMを提供します。
■SELECT
User::all();
User::find(1);
■INSERT
$user = User::create(array('name' => 'John'));
■UPDATE
$user = User::find(1);
$user->email = 'john@foo.com';
$user->save();
■DELETE
$user = User::find(1);
$user->delete();
エロクアントの場合は、デフォルトでは
クラス名を小文字の複数形にしたものが、テーブル名として使用されます。
初期状態の場合はapp/modelsにUserクラスが設置されています。
複数形ではない別のテーブルを使用する場合は、
protected $table = 'table_name';
と定義し
同様にfindで使われるものはprimaryKeyとなりますので、
protected $primaryKey = "table_id";
と定義します。
検索条件の追加等はクエリービルダーを組み合わせて実装していきます。
エロクアント、クエリービルダー、ベーシックの3種とも、
データベースのマスター、スレーブ、複数のデータベースを使用する場合等は、
// ベーシック
DB::connection('master')->select($sql, $params);
// クエリービルダー
DB::connection('master')->table('table')->get();
// エロクアント
User::on('slave)->find(1);
等の様に接続先を変更します。
これらの接続先は、app/config/database.php内のconnections配列のキーを
指定することで変更可能です。
デフォルトはsqlite, mysql, pgsql(PostgreSQL), sqlsrv(SQL Server)になっていますので、
masterやslaveなどへ変更して、接続先を指定してください。
ーーーーーーーーhttp://www.ospn.jp/press/20140605no40-useit-oss.htmlーーーーーーーーーーーーーー
DB::connection(切り替えるテーブルの変数名)->beginTransaction();
トランザクションという処理の詰め合わせのようなものをはじめて
DB::connection(切り替えるテーブルの変数名)->commit();
でデータベースに反映する
$a = App::make('MyManager')->getConnection();
Laravel はApp::makeでクラス名を指定すれば、それをnewと同様にインスタンス化してくれます。
(http://kore1server.com/186)
<?php // key comes from app/config/app.php. // this will output a big long random string echo Config::get('app.key'); // timezone comes from app/config/local/app.php // this will output "America/Los_Angeles" echo Config::get('app.timezone'); ?>
http://laravel-recipes.com/recipes/27/environment-specific-configurations
——————————http://laravel4.kore1server.com/docs/database-----------
ちなみにPlayerCardManager.phpの
$con = App::make('PlayerManager')->getPlayerConnection($playerId);
PlayerManager.phpのPlayerManagerクラスのインスタンスの
関数getPlayerConnectionに引数(playerId=19800422など)を渡して
DB::connection($con)->beginTransaction();は
場合により、自分でトランザクションを始める必要があることもあるでしょう。
DB::beginTransaction();
トランザクションをロールバックするには、rollbackメソッドを使用します。
DB::rollback();
最後に、トランザクションのコミットは、commitメソッドです。
DB::commit();
トランザクションとは http://gihyo.jp/dev/serial/01/db-academy/000201 より
データベースは,トランザクションという単位で「ユーザが実行した一連のながながとした処理」を管理します。
コネクションとの接続
複数のコネクションを使用するときはDB::connectionメソッドが使用できます。
$users = DB::connection('foo')->select(...);
———————http://laravel4.kore1server.com/docs/database--------------------
- | whaison | php Laravel | 19:00 | comments(0) | - | pookmark |