ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
基本: select() で列を指定
use Illuminate\Support\Facades\DB;
// 全列
$users = DB::table('users')->get();
// 列指定
$users = DB::table('users')->select('id', 'name', 'email')->get();
// エイリアス
$users = DB::table('users')
->select('id', 'name AS user_name', 'email')
->get();
// 配列で渡す
$users = DB::table('users')->select(['id', 'name'])->get();
selectRaw: 生 SQL 式
// COUNT / SUM 等の集計
$stats = DB::table('orders')
->selectRaw('user_id, COUNT(*) AS cnt, SUM(amount) AS total')
->groupBy('user_id')
->get();
// 日付フォーマット
$logs = DB::table('access_logs')
->selectRaw("DATE_FORMAT(created_at, '%Y-%m-%d') AS day, COUNT(*) AS hits")
->groupBy('day')
->get();
// バインドパラメータを使う(SQL インジェクション対策)
$users = DB::table('users')
->selectRaw('price * ? AS price_with_tax', [1.1])
->get();
addSelect: 列を追加
$query = DB::table('users')->select('id', 'name');
if ($request->include_email) {
$query->addSelect('email');
}
if ($request->include_role) {
$query->addSelect('role');
}
$users = $query->get();
distinct: 重複排除
// ユニークな国一覧
$countries = DB::table('users')
->select('country')
->distinct()
->get();
// 複数列の組み合わせで distinct
$pairs = DB::table('orders')
->select('user_id', 'product_id')
->distinct()
->get();
WHERE / ORDER BY / GROUP BY / HAVING
$users = DB::table('users')
->select('id', 'name', 'created_at')
->where('active', 1)
->where('age', '>=', 18)
->whereIn('country', ['JP', 'US', 'KR'])
->whereNull('deleted_at')
->whereBetween('age', [20, 65])
->orderBy('created_at', 'desc')
->get();
// GROUP BY / HAVING
$summary = DB::table('orders')
->select('user_id', DB::raw('SUM(amount) AS total'))
->groupBy('user_id')
->having('total', '>', 10000)
->orderByDesc('total')
->get();
JOIN を組み合わせた SELECT
$rows = DB::table('users')
->join('orders', 'users.id', '=', 'orders.user_id')
->leftJoin('payments', 'orders.id', '=', 'payments.order_id')
->select(
'users.id',
'users.name',
'orders.id AS order_id',
'orders.amount',
'payments.paid_at'
)
->where('orders.status', 'completed')
->orderBy('orders.created_at', 'desc')
->get();
サブクエリ: selectSub / whereExists
// selectSub: 各 user に最終ログイン時刻を付与
$users = DB::table('users')
->select('id', 'name')
->selectSub(function ($q) {
$q->select('created_at')
->from('login_logs')
->whereColumn('login_logs.user_id', 'users.id')
->orderByDesc('created_at')
->limit(1);
}, 'last_login_at')
->get();
// whereExists: 注文を持つユーザー
$users = DB::table('users')
->whereExists(function ($q) {
$q->select(DB::raw(1))
->from('orders')
->whereColumn('orders.user_id', 'users.id');
})
->get();
取得メソッドの使い分け
| メソッド | 返り値 | 用途 |
|---|---|---|
get() | Collection of stdClass | 複数行取得 |
first() | stdClass / null | 1 行目を取得 |
find($id) | stdClass / null | PK で 1 件 |
value('column') | scalar | 1 列だけ取得 |
pluck('name') | Collection<string> | 単一列をリスト化 |
pluck('name', 'id') | Collection<id => name> | キー付きリスト |
count() | int | 行数 |
exists() | bool | 存在チェック(高速) |
chunk(100, fn) | void | 大量データ分割処理 |
cursor() | Generator | 1 行ずつメモリ節約 |
pluck の便利な使い方
// id だけのリスト
$ids = DB::table('users')->where('active', 1)->pluck('id')->all();
// [1, 2, 3, 5, 8]
// id => name の連想配列(HTML select 用)
$options = DB::table('users')->pluck('name', 'id');
// [1 => 'Taro', 2 => 'Hanako', ...]
// Blade で
// <select>
// @foreach ($options as $id => $name)
// <option value="{{ $id }}">{{ $name }}</option>
// @endforeach
// </select>
ページネーション
$users = DB::table('users')
->select('id', 'name')
->orderBy('id')
->paginate(20); // 1ページ20件
// Blade
// {{ $users->links() }}
// simplePaginate は総件数を計算せず軽量
$users = DB::table('users')->simplePaginate(20);
// カーソルベース(大量データ向け)
$users = DB::table('users')->orderBy('id')->cursorPaginate(20);
Eloquent でも同じ
use App\Models\User;
// 全列
$users = User::all();
// 列指定
$users = User::select('id', 'name', 'email')->where('active', 1)->get();
// リレーションも eager load しつつ
$users = User::with('orders:id,user_id,amount')
->select('id', 'name')
->get();
// pluck
$emails = User::where('active', 1)->pluck('email');
パフォーマンスのコツ
- 必要な列だけ select: TEXT / JSON 列を含む全列取得は重い
- EXPLAIN で確認:
DB::table(...)->toSql()でクエリ確認 → MySQL で EXPLAIN - N+1 回避: Eloquent では
with()で eager load - chunk / cursor: 10 万行以上扱うときは
chunk(1000)orcursor() - インデックス: where / orderBy 列に index、複合 index は左端から
- QueryBuilder の
toSql()+ DB::listen() でロガー
FAQ
Q: get() と first() の違い
A: get() は Collection(複数行)、first() は最初の 1 行のオブジェクト or null。「絶対1件しかないクエリ」でも get() を呼ぶと配列処理が必要になり面倒。
Q: 実行された SQL を確認したい
A: DB::table(...)->toSql() でクエリ文字列、DB::table(...)->dd() でバインド込みダンプ。DB::listen(fn($q) => Log::info($q->sql)) で全クエリログ。
Q: select で alias を付けると Eloquent で取れない
A: モデル属性として取得するには $user->getAttribute('alias') or $user->alias。生クエリの結果は stdClass なので注意。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?