http://laravel.com/docs/4.2/eloquent#query-scopes
Laravel5を使っていますが、Laravel4でも考え方は同じなはずです。
Illuminate\Database\Eloquent\Model を継承した Fooクラス が、以下のクエリスコープを持っているとします。
public function scopeBar(Builder $q, $baz)
{
return $q->whereHas('qux', function ($q) use ($baz) {
$q->where('quxx', $baz);
});
}
とりあえず、このクエリスコープが組み立てるSQLを、バインドされるパラメータ含めて確認できれば良かったので、以下の方法でやってみました。
1.
storage/database.sqlite を作成。コネクションエラーを回避したいだけなので、空ファイルでOKです。
2.
config/database.php を編集。
'default' => env('DB_DRIVER', 'mysql'),
3.phpunit.xml に追記。
<env name="DB_DRIVER" value="sqlite"/>4.
テスト。
public function testScopeBar()
{
$q = (new Foo())->bar(100);
$sql = $q->toSql();
$bindings = $q->getBindings();
dd($sql, $bindings); // これをテストする
}
より良い方法があれば教えて下さい。
この記事のおかげで、それは私をたくさん助けました!私はまた、多くの人に役立つ素晴らしいライン 監視 やり方法を共有したいと思います。
ReplyDelete