为了在 Laravel 中创建一个范围,我们手动定义了一个公共(public)方法,该方法与我们在构建查询时要使用的名称相匹配:
/**
* Scope of Microsoft organization.
*
* @param Builder $query
* @return Builder
*/
public function scopeMicrosoft($query)
{
return $query->where('slug', 'microsoft');
}
用法:
Organization::microsoft()->first();
现在假设我们有超过 50 个组织,并且希望自动为每个基于 slug
属性的模型设置一个范围。有一种方法可以大规模创建作用域吗?
最佳答案
来自 docs :
动态作用域
Sometimes you may wish to define a scope that accepts parameters. To get started, just add your additional parameters to your scope. Scope parameters should be defined after the $query parameter:
namespace App;
use Illuminate\Database\Eloquent\Model;
class SomeModel extends Model
{
/**
* Scope a query to only include users of a given type.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param mixed $type
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeOrganization($query, $org)
{
return $query->where('slug', $org);
}
}
现在,您可以在调用作用域时传递参数:
$users = App\SomeModel::organization('Microsoft')->get();
关于php - Laravel:如何大规模创建作用域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48443604/