Php Laravel:如何大规模创建范围?
为了在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
/**
* 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();