データベース: クエリビルダ
はじめに
Laravelのデータベースクエリビルダは、便利で流暢なインターフェースを提供し、データベースクエリの作成と実行を行うことができます。アプリケーション内でほとんどのデータベース操作を実行するために使用でき、すべてのLaravelがサポートするデータベースシステムと完璧に動作します。
LaravelのクエリビルダはPDOパラメータバインディングを使用して、アプリケーションをSQLインジェクション攻撃から保護します。クエリバインディングとして渡される文字列をクリーンアップまたはサニタイズする必要はありません。
PDOは列名のバインディングをサポートしていません。したがって、クエリで参照される列名をユーザー入力で制御させてはいけません。"order by"列を含むクエリによって参照される列名を制御させてはいけません。
データベースクエリの実行
テーブルからすべての行を取得する
DB
ファサードが提供する table
メソッドを使用してクエリを開始できます。table
メソッドは、指定されたテーブル用のフルーエントクエリビルダーインスタンスを返し、クエリにさらに制約を追加してから get
メソッドを使用してクエリの結果を取得できます:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\View\View;
class UserController extends Controller
{
/**
* Show a list of all of the application's users.
*/
public function index(): View
{
$users = DB::table('users')->get();
return view('user.index', ['users' => $users]);
}
}
get
メソッドは、クエリの結果を含む Illuminate\Support\Collection
インスタンスを返します。各結果は PHP の stdClass
オブジェクトのインスタンスです。オブジェクトのプロパティとして列の値にアクセスできます:
use Illuminate\Support\Facades\DB;
$users = DB::table('users')->get();
foreach ($users as $user) {
echo $user->name;
}
Laravel コレクションには、データのマッピングや縮小に非常に強力なメソッドが多数用意されています。Laravel コレクションについての詳細は、コレクションのドキュメントを参照してください。
テーブルから単一の行/列を取得する
データベーステーブルから単一の行を取得するだけの場合は、DB
ファサードの first
メソッドを使用できます。このメソッドは単一の stdClass
オブジェクトを返します:
$user = DB::table('users')->where('name', 'John')->first();
return $user->email;
行全体が不要な場合は、value
メソッドを使用してレコードから単一の値を抽出できます。このメソッドは列の値を直接返します:
$email = DB::table('users')->where('name', 'John')->value('email');
id
列の値によって単一の行を取得するには、find
メソッドを使用します:
$user = DB::table('users')->find(3);
列の値のリストを取得する
単一の列の値を含む Illuminate\Support\Collection
インスタンスを取得したい場合は、pluck
メソッドを使用できます。この例では、ユーザーのタイトルのコレクションを取得します:
use Illuminate\Support\Facades\DB;
$titles = DB::table('users')->pluck('title');
foreach ($titles as $title) {
echo $title;
}
You may specify the column that the resulting collection should use as its keys by providing a second argument to the `pluck` method:
$titles = DB::table('users')->pluck('title', 'name');
foreach ($titles as $name => $title) {
echo $title;
}