做什么之间的区别是什么:
$model = User::newQuery();
$model->published(1);
$model->get();
和
$model = User;
$model = $model->published(1);
$model = $model->get();
我知道第二个例子,您必须将回叫分配给模型。但这些有什么不同吗?
注意,我没有链接,因为在检查是否应该发布之间会有一些条件等。
答案 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()
我得到了
不同之处在于,一旦实例化,您将不得不执行$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(),所以,也许吧。