Laravelでクエリビルダを使ってみる

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');

テーブルは以下のような内容になっています。

try-using-the-query-builder-in-laravel01

 

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を返すようにしました。
 

他にも色々ありますので、詳しくはドキュメントをご確認ください。
 

【参考サイト】

 

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2024年12月
1234567
891011121314
15161718192021
22232425262728
293031