Laravelのクエリビルダの中からいくつかを使ってみます。
準備
データベースなどの設定は以前投稿したLaravelでデータベースに接続してみるの内容を流用しています。
モデルとルーティングは以下のように設定しています。
app\Sample.php
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Sample extends Model { protected $fillable = ['title', 'body', 'username']; }
app\Http\routes.php
Route::get('/queries', 'QueriesController@getIndex');
テーブルは以下のような内容になっています。
get
テーブル内の全レコードを取得してみます。
app\Http\Controllers\QueriesController.php
<?php namespace App\Http\Controllers; use App\Sample; class queriesController extends Controller { public function getIndex() { // 全レコードの取得 $data = Sample::get(); if(empty($data)) { return '取得できませんでした。'; } $title = $data[0]->title; return var_dump($title); // string(7) "Title A" } }
全レコードを取得して、0番目のレコードのtitleを返すようにしました。
find
findでidを指定して、該当するレコードを取得してみます。
app\Http\Controllers\QueriesController.php
<?php namespace App\Http\Controllers; use App\Sample; class queriesController extends Controller { public function getIndex() { // 指定したidのレコードを取得 $data = Sample::find(11); $title = $data->title; return var_dump($title); // string(7) "Title A" } }
idが11のレコードを取得して、titleの値を返すようにしました。
where
カラムの値を指定して、一致するレコードを取得してみます。
app\Http\Controllers\QueriesController.php
<?php namespace App\Http\Controllers; use App\Sample; class queriesController extends Controller { public function getIndex() { // 指定した値に一致する先頭のレコードを取得する $data = Sample::where('username', 'UserA')->first(); $id = $data->id; return var_dump($id); // int(11) } }
whereで条件に一致するレコードを調べて、その中からfirstで先頭のレコードを取得して、そのレコードのidを返すようにしました。
whereは基本的にはwhere(‘カラム名’, ‘不等号などのオペレーター’, ‘比較する値’)のような形で使用しますが、カラムと値が等しいかどうかを比べる場合、第二引数を省略できます。
先ほどは等しい値のレコードを取得しましたが、「<」や「>=」のような不等号でも指定できます。
app\Http\Controllers\QueriesController.php
<?php namespace App\Http\Controllers; use App\Sample; class queriesController extends Controller { public function getIndex() { // 指定した値に一致するレコードを取得する $data = Sample::where('id', '>=', 12)->get(); $id = $data[0]->id; return var_dump($id); // int(12) } }
whereの条件に一致するレコードをgetで取得して、0番目のレコードのidを返すようにしました。
value
レコードを絞った後で、使いたいカラムの値だけ取得してみます。
app\Http\Controllers\QueriesController.php
<?php namespace App\Http\Controllers; use App\Sample; class queriesController extends Controller { public function getIndex() { // レコードからカラムを絞って取得 $data = Sample::where('username', 'UserB')->value('id'); return var_dump($data); // int(12) } }
valueでidを指定して、取得したレコードからidのみを取得して返すようにしました。
pluck
カラムを指定して、各レコードの値を取得してみます。
app\Http\Controllers\QueriesController.php
<?php namespace App\Http\Controllers; use App\Sample; class queriesController extends Controller { public function getIndex() { // カラムを配列で取得 $data = Sample::pluck('title'); return var_dump($data[0]); // string(7) "Title A" } }
各レコードのtitleの値を取得して、0番目の値を返すようにしました。
集計
countでレコードの数を取得してみます。
app\Http\Controllers\QueriesController.php
<?php namespace App\Http\Controllers; use App\Sample; class queriesController extends Controller { public function getIndex() { // レコード数の取得 $data = Sample::count(); return var_dump($data); // int(3) } }
minでカラムの最小値を取得してみます。
app\Http\Controllers\QueriesController.php
<?php namespace App\Http\Controllers; use App\Sample; class queriesController extends Controller { public function getIndex() { // カラムの最小値 $data = Sample::min('id'); return var_dump($data); // int(11) } }
maxでカラムの最大値を取得してみます。
app\Http\Controllers\QueriesController.php
<?php namespace App\Http\Controllers; use App\Sample; class queriesController extends Controller { public function getIndex() { // カラムの最大値 $data = Sample::max('id'); return var_dump($data); // int(13) } }
avgでカラムの値の平均を取得してみます。
app\Http\Controllers\QueriesController.php
<?php namespace App\Http\Controllers; use App\Sample; class queriesController extends Controller { public function getIndex() { // カラムの平均 $data = Sample::avg('id'); return var_dump($data); // string(7) "12.0000" } }
sumでカラムの値の合計を取得してみます。
app\Http\Controllers\QueriesController.php
<?php namespace App\Http\Controllers; use App\Sample; class queriesController extends Controller { public function getIndex() { // カラムの合計 $data = Sample::sum('id'); return var_dump($data); // string(2) "36" } }
orderBy
並び順を変更してみます。
app\Http\Controllers\QueriesController.php
<?php namespace App\Http\Controllers; use App\Sample; class queriesController extends Controller { public function getIndex() { // 並び順を変更する $data = Sample::where('username', 'UserA')->orderBy('id', 'desc')->first(); $id = $data->id; return var_dump($id); // int(13) } }
whereの条件に一致するレコードを並び順を昇順にしてから先頭を取得して、そのレコードのidを返すようにしました。
orderByはascで降順、descで昇順になります。
inRandomOrder
レコードをランダムで取得してみます。
app\Http\Controllers\QueriesController.php
<?php namespace App\Http\Controllers; use App\Sample; class queriesController extends Controller { public function getIndex() { // ランダムで取得 $data = Sample::inRandomOrder()->first(); $id = $data->id; return var_dump($id); // int(11)/int(12)/int(13) のいずれかがランダムで表示 } }
ランダムに並び替えてから先頭を取得して、そのレコードのidを返すようにしました。
select
指定したカラムの値を取得してみます。
app\Http\Controllers\QueriesController.php
<?php namespace App\Http\Controllers; use App\Sample; class queriesController extends Controller { public function getIndex() { // 指定したカラムを取得 $data = Sample::select('id', 'title')->get(); $title = $data[1]->title; return var_dump($title); // string(7) "Title B" } }
指定したカラムの値を取得して、1番目のtitleを返すようにしました。
他にも色々ありますので、詳しくはドキュメントをご確認ください。
【参考サイト】
コメントが承認されるまで時間がかかります。