web-dev-qa-db-ja.com

newQuery()in Laravel

行うことの違いは何ですか:

$model = User::newQuery();
$model->published(1);
$model->get();

そして:

$model = User;
$model = $model->published(1);
$model = $model->get();

2番目の例では、コールバックをモデルに割り当てる必要があることを知っています。しかし、これらに何か違いはありますか?

公開すべきかどうかの確認などの間にいくつかの条件があるため、私は連鎖していません。

7
panthro

それはpublished()が何であるかに依存します。コードを少し変更する:

_$model = User::newQuery();
$model->where('published', 1);
$model->get();
_

または

_$model = new User;
$model = $model->where('published', 1);
$model = $model->get();
_

やってる

_Route::get('debug/model', function () {
    $model = new App\Data\Entities\User;

    $model = $model->with('gender');
    $model = $model->where('username', 'gigante');
    $model = $model->get();

    dd($model);
});
_

私は得た

enter image description here

違いは、インスタンス化したら、$model = $model->whatever()を実行する必要があることです。これは、laravelがQueryBuildのインスタンスを返し、Eloquentのインスタンスがあるためです。

したがって、大した違いはありません。Laravelがモデルで必要なものを実行できない場合、newQuery()を実行することで、QueryBuilderに直接送信されるため、コードは基本的に同じ。

コードに戻って、

_$model->published(1);
_

Modelがそのメソッドを見つけられない場合は、newQuery()を試行します。