データベースに対して、getで全てのデータを要求する場合によく使います。
例えば、Reactなので、Urlを指定されて、関連するデータを全て要求された場合の
受け側として便利です。
const baseUrl = 'http://localhost:8080/todos';
// Todo を取得する
const getAll = async () => {
const response = await axios.get(baseUrl);
return response.data;
};
✅ 想定例
データベースおよびテーブルは作成済として、欲しいカラムデータは下記
- テーブル名:
users - 欲しいカラム:
name
🔧 コントローラーの記述方法
1. Eloquentを使った取得方法
phpuse App\Models\User;
use Illuminate\Http\JsonResponse;
public function getUserNames(): JsonResponse
{
$names = User::pluck('name'); // pluckで指定カラムのみ取得
return response()->json($names);
}
pluck()とは?
- 特定のカラムだけを抽出できる便利なEloquentメソッドです。
- 結果はコレクションになります(Laravel Collection)。
2. クエリビルダを使う場合
phpuse Illuminate\Support\Facades\DB;
public function getUserNames(): JsonResponse
{
$names = DB::table('users')->pluck('name');
return response()->json($names);
}
🧪 実行結果(例)
json[
"田中太郎",
"佐藤花子",
"鈴木一郎"
]
✅ 任意のカラムを動的に指定する場合
例えば、クエリパラメータなどでカラム名を受け取るようにしたい場合:
phppublic function getColumnData(Request $request): JsonResponse
{
// 例: URLにクエリストリング?columns=nameを付ける
$column = $request->input('column', 'name'); // デフォルト: 'name'
// カラム名のバリデーション(ホワイトリスト方式を推奨)
$allowedColumns = ['name', 'email', 'age'];
if (!in_array($column, $allowedColumns)) {
return response()->json(['error' => 'Invalid column'], 400);
}
$data = DB::table('users')->pluck($column);
return response()->json($data);
}
🛡️ 注意点
- SQLインジェクション対策のため、動的にカラム名を指定する場合は必ず
ホワイトリストで制限しましょう。 pluck()は1カラムのみ対応です。複数カラムが必要な場合はselect()とget()を使います。
複数カラムを取得してJSONとして返したい場合は、pluck()ではなく、select()+get()を使います。
以下に具体的な方法を示します。
✅ 複数カラムのJSON取得方法
例:usersテーブルから name, email, age を取得
phpuse Illuminate\Support\Facades\DB;
use Illuminate\Http\JsonResponse;
public function getUserData(): JsonResponse
{
$users = DB::table('users')
->select('name', 'email', 'age')
->get();
return response()->json($users);
}
🔄 結果のJSON(例)
json[
{
"name": "田中太郎",
"email": "taro@example.com",
"age": 30
},
{
"name": "佐藤花子",
"email": "hanako@example.com",
"age": 25
}
]
✅ Eloquentを使う場合
phpuse App\Models\User;
public function getUserData(): JsonResponse
{
$users = User::select('name', 'email', 'age')->get();
return response()->json($users);
}
✅ 任意の複数カラムを動的に指定したい場合
phppublic function getSelectedColumns(Request $request): JsonResponse
{
// 例: URLに ?columns[]=name&columns[]=email
$columns = $request->input('columns', ['name']);
// ホワイトリストで検証
$allowed = ['name', 'email', 'age', 'gender'];
$safeColumns = array_filter($columns, fn($col) => in_array($col, $allowed));
if (empty($safeColumns)) {
return response()->json(['error' => 'No valid columns selected'], 400);
}
$users = DB::table('users')
->select($safeColumns)
->get();
return response()->json($users);
}
🛡️ セキュリティのポイント
- 必ず取得可能なカラムをホワイトリストで制限してください。
ユーザーが任意のカラム名を渡せるようにすると、
セキュリティリスクになります(例: パスワードカラムの漏洩)。 pluck()は1カラム(またはkey-value)専用なので、
複数カラムには使えません。

