Laravel を使用すると、ネイティブ SQL、クエリ ビルダー、または Eloquent ORM のいずれを使用しても、複数のデータベースに接続してデータベースにクエリを実行することが非常に簡単になります。現在、Laravel は 4 種類のデータベース システムをサポートしています:
Laravel を使用すると、データベースへの接続とクエリの実行が非常に簡単になります。アプリケーションのデータベース設定は config/database.php にあります。このファイルでは、すべてのデータベース接続を定義し、どの接続がデフォルトの接続であるかを指定できます。このファイルには、サポートされているすべてのデータベース システムの構成例が記載されています。
デフォルトでは、Laravel サンプル環境構成が Laravel Homestead 用にセットアップされています。もちろん、必要に応じてローカル データベースの構成を変更することもできます。
読み取り/書き込み接続
ネイティブ SQL を使用しているかクエリ ビルダーを使用しているかに関係なく、あるデータベース接続を使用してクエリを実行し、別のデータベース接続を使用して挿入、更新、削除を実行したい場合があります。 Eloquent ORM では、適切な接続が常に使用されます。
読み取り/書き込み接続を構成する方法を知るために、次の例を見てみましょう:
'mysql' => [ 'read' => [ 'host' => '192.168.1.1', ], 'write' => [ 'host' => '196.168.1.2' ], 'driver' => 'mysql', 'database' => 'database', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '',],
構成配列に 2 つの新しいキーを追加したことに注意してください: 読み取りと書き込み。どちらも 1 つのキーに対応します。 「ホスト」および読み取り/書き込み接続用のその他のデータベース構成オプションはすべて、mysql のメイン配列構成を共有します。
メイン配列の構成を上書きしたい場合は、対応する構成項目を読み取り配列と書き込み配列に配置するだけです。この例では、192.168.1.1 が「読み取り」接続として使用され、192.168.1.2 が「書き込み」接続として使用されます。 2 つのデータベース接続の資格情報 (ユーザー名/パスワード)、プレフィックス、文字セット、およびその他の構成は、mysql 配列内の設定を共有します。
データベース接続を構成した後、DB ファサードを使用してクエリを実行できます。 DB ファサードは、各クエリに対応するメソッド (選択、更新、挿入、削除、ステートメント) を提供します。
基本的なクエリを実行するには、DB ファサードの select メソッドを使用できます:
<?phpnamespace App\Http\Controllers;use DB;use App\Http\Controllers\Controller;class UserController extends Controller{ /** * 显示用户列表 * * @return Response */ public function index() { $users = DB::select('select * from users where active = ?', [1]); return view('user.index', ['users' => $users]); }}
select メソッドに渡される最初のパラメータはネイティブ SQL ステートメントであり、2 番目のパラメータはネイティブ SQL ステートメントにバインドする必要があります通常、これらは where 句制約の値です。パラメーター バインディングにより、SQL インジェクション攻撃を回避できます。
select メソッドは、配列の形式で結果セットを返します。配列内の各結果は PHP StdClass オブジェクトなので、次のように結果値にアクセスできます。
foreach ($users as $user) { echo $user->name;}
? プレースホルダー パラメーター バインディングを表すことに加えて、名前付きバインディングを使用してクエリを実行することもできます。 select と同様に、modified メソッドはネイティブ SQL ステートメントを最初のパラメーターとして受け取り、バインディングを 2 番目のパラメーターとして受け取ります。
$results = DB::select('select * from users where id = :id', ['id' => 1]);
update メソッドは、データベース内の既存のレコードを更新するために使用されます。このメソッドは、更新されたものを返します。ステートメントによって影響を受ける行の数:
DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']);
delete メソッドは、update と同様に、削除された行の数を返します:
$affected = DB::update('update users set votes = 100 where name = ?', ['John']);
一部のデータベース このタイプの操作では、DB ファサードのステートメント メソッドを使用できます。
$deleted = DB::delete('delete from users');
このメソッドはクエリのロギングとデバッグに非常に便利で、サービス プロバイダーにクエリ リスナーを登録できます。
DB::statement('drop table users');
<?phpnamespace App\Providers;use DB;use Illuminate\Support\ServiceProvider;class AppServiceProvider extends ServiceProvider{ /** * 启动所有应用服务 * * @return void */ public function boot() { DB::listen(function($sql, $bindings, $time) { // }); } /** * 注册服务提供者 * * @return void */ public function register() { // }}
DB::transaction(function () { DB::table('users')->update(['votes' => 1]); DB::table('posts')->delete();});
DB::beginTransaction();
DB::rollBack();
注: DB ファサードを使用したトランザクション メソッドは、次の目的にも使用できます。クエリビルダーとEloquent ORMのトランザクションを制御します。
4. 複数のデータベース接続を使用する
複数のデータベース接続を使用する場合、DB ファサードの接続メソッドを使用して各接続にアクセスできます。接続メソッドに渡される接続名は、構成ファイル config/database.php 内の対応する接続に対応します:
DB::commit();
$users = DB::connection('foo')->select(...);