Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel:如何大规模创建范围?_Php_Laravel - Fatal编程技术网

Php Laravel:如何大规模创建范围?

Php Laravel:如何大规模创建范围?,php,laravel,Php,Laravel,为了在Laravel中创建作用域,我们手动定义一个公共方法,该方法与构建查询时要使用的名称相匹配: /** * Scope of Microsoft organization. * * @param Builder $query * @return Builder */ public function scopeMicrosoft($query) { return $query->where('slug', 'microsoft'); } 用法: Organizat

为了在Laravel中创建作用域,我们手动定义一个公共方法,该方法与构建查询时要使用的名称相匹配:

/**
 * Scope of Microsoft organization.
 * 
 * @param Builder $query
 * @return Builder
 */
public function scopeMicrosoft($query) 
{
    return $query->where('slug', 'microsoft');
}
用法:

Organization::microsoft()->first();
现在想象一下,我们有>50个组织,并且希望根据
slug
属性自动为每个模型设置范围。有一种方法可以大量创建作用域?

如果要在所有模型中使用此作用域,可以使用

或者将此局部范围添加到trait中,并在多个模型中使用。

来源:

动态范围

有时,您可能希望定义一个接受参数的范围。要开始,只需将其他参数添加到范围中。范围参数应在$query参数之后定义:

现在,您可以在调用作用域时传递参数:

$users = App\SomeModel::organization('Microsoft')->get();

将此包用于动态全局范围生成,

php artisan make:scope ActiveScope

php artisan make:scope用户范围


php artisan make:scope AgeScope等。

这不是重点。问题是:“如何根据模型属性自动创建范围”。@AlexandreThebaldi问题是“有一种方法可以大量创建范围”,我回答了这个问题。你所说的基于模型属性的
到底是什么意思?
?在这种情况下,“大规模”一词相当令人困惑,你可能需要修改你的问题以使其更清楚。你的意思是想定义一次,然后动态调用它们,比如
scopeApple()
scopeOracle()
等等?@MatthewDaly!老实说,Tpojka的回答很好地涵盖了这一点,因为没有理由不将所讨论的组织的名称作为参数传递,例如
组织(“Microsoft”)
,以及it。你可以用它来做这类事情,但问题是雄辩已经在使用它了,所以在不破坏现有功能的情况下,这样做会很棘手。为了更好,您最好将组织名称作为参数传递。当您调用任何现有作用域时,它已经在
illighted\Database\Query\Builder
中点击了
\uu call()
,因此它将非常灵活地处理并捕获这些方法调用,而不会造成问题。这可能是可以做到的,但仅仅为了一点点语法上的糖分,这可能比它的价值更麻烦。而且,由于作用域已经使用
\u call()
来有效地重写方法名,因此它们在这方面特别棘手。
$users = App\SomeModel::organization('Microsoft')->get();