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を返すようにしました。
他にも色々ありますので、詳しくはドキュメントをご確認ください。
【参考サイト】
コメントが承認されるまで時間がかかります。