是否有任何方法可以中断和更改雄辩查询的组件和范围?
in order添加多租户我添加了一个全局作用域对于我的模型,通过tenant_id过滤结果. 它工作得很好。
问题是我发现了500多个硬编码的'where条件'和'create语句'到处都是。例如:
$notification_type= NotificationTypes::where('id', '2')->get();
或
$tickets = Tickets::create( $title, $body, $sender, '1'); // 1 as statusID
等。
这是一个问题,因为我使用单DB方法进行多租户,这些id必须相对于租户。例如,在上面的第一个查询中,我不想要Id为'2'的'NotificationTypes',但我想要'second' NotificationType与tenant_id(该列的Id可以是4或7或其他)。
我可以找到一种方法来正确计算这些相对id的确切数量。但是是否有办法找到一个雄辩对象的先验范围和条件并改变它们呢?
我正在寻找一种方法来添加多租户项目,而不改变现有的代码。像一个模块或插件。
你可以在Laravel中使用作用域
public function scopeActive($query)
{
$query->where('active', 1);
}
然后在控制器中调用
$notification_type = NotificationTypes::active()->get();
更多参考文档:https://laravel.com/docs/9.x/eloquent#query-scopes
动态范围
public function scopeActive($query, $value)
{
return $query->where('active', $value);
}
$notification_type = NotificationTypes::active(value_you_want)->get();
把value_you_want改成你想要的值
也可以用
$notification_type = NotificationTypes::where('id', 1)->orWhere('tenant_id', 1)->get();