Laravel中的newQuery()

pan*_*hro 7 laravel laravel-5 laravel-5.3

这样做的区别是什么:

$model = User::newQuery();
$model->published(1);
$model->get();
Run Code Online (Sandbox Code Playgroud)

和:

$model = User;
$model = $model->published(1);
$model = $model->get();
Run Code Online (Sandbox Code Playgroud)

我知道第二个例子你必须将回调分配给模型.但这些有什么不同吗?

请注意,我没有链接,因为在检查是否应该发布之间会有一些条件等.

Ant*_*iro 4

这取决于published() 是什么。稍微改变一下你的代码:

$model = User::newQuery();
$model->where('published', 1);
$model->get();
Run Code Online (Sandbox Code Playgroud)

或者

$model = new User;
$model = $model->where('published', 1);
$model = $model->get();
Run Code Online (Sandbox Code Playgroud)

正在做

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);
});
Run Code Online (Sandbox Code Playgroud)

我有

在此输入图像描述

不同之处在于,一旦实例化,您就必须执行$model = $model->whatever(),因为 laravel 返回 QueryBuild 的实例,而您现在拥有 Eloquent 的实例。

所以,没有太大区别,因为当 Laravel 无法执行模型中所需的内容时,它会通过执行 newQuery() 直接进入 QueryBuilder,因此您的代码执行的操作基本相同。

回到你的代码,

$model->published(1);
Run Code Online (Sandbox Code Playgroud)

如果 Model 没有找到该方法,那么它会尝试 newQuery(),所以,也许吧。