Laravel中的newQuery()

时间:2016-12-02 12:35:58

标签: laravel laravel-5 laravel-5.3

做什么之间的区别是什么:

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

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

我知道第二个例子,您必须将回叫分配给模型。但这些有什么不同吗?

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

1 个答案:

答案 0 :(得分:2)

这取决于发布的()是什么。稍微改变你的代码:

$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);
});

否则

$model = $model->whatever()

我得到了

enter image description here

不同之处在于,一旦实例化,您将不得不执行$model->published(1); ,因为laravel正在返回一个QueryBuild实例,而您现在有一个Eloquent实例。

所以,没有太大区别,因为当Laravel无法在模型中执行你需要的东西时,它会通过执行newQuery()直接进入QueryBuilder,所以你的代码基本上都是一样的。

支持您的代码,

load_data = [1, 2, 3, 4, 10, 20]
global value 
value = 30

def process(m): 
    print m

def selection():
    # make a local copy of load_data
    data = load_data[:]
    global value  # <- value is the input 
    while data and (value > 0):
        maxval = max(data)
        posix = data.index(maxval)
        if posix >=0:
            value = value - data[posix] # <- subtract max value from input and repeat process 
            process(data[posix])
            data.pop(posix)  
selection()

如果Model doest找不到那个方法,那么它会尝试newQuery(),所以,也许吧。