我正在为在 Laravel 中拥有一组用户的公司创建一个在线工具。
当用户连接时,他有一个 $connected_company_id
变量
对于每个 SELECT 请求(由::all()、find()、... 调用),我想添加条件:
where company_id = $connected_company_id
。我找到了这篇文章:laravel set an automatic where clause ,但它不能通过重写 newQuery() 来工作。对于每个 INSERT 请求,我想添加 company_id。
这是否可能无需更改所有 Controller 内的代码?
我考虑过使用 customEloquent
扩展 Eloquent,然后让我的模型扩展 customEloquent
,但我不知道如何编写 customEloquent 的代码以及是否可以工作。
最佳答案
嗯,您可以利用 Eloquent 模型事件。我假设您已将connected_company_id存储在 session company_id
class BaseModel extends Eloquent{
public static function boot(){
parent::boot();
//Column to inject when inserting
static::creating(function ($obj){
$obj->company_id = Session::get('company_id');
});
//Column to inject when updating
static::updating(function ($obj){
$obj->company_id = Session::get('company_id');
});
}
}
您可以在想要插入或更新 company_id 的所有模型上扩展 BaseModel 类。看看Eloquent Model Events了解更多信息。
以上代码将自动将 company_id 插入或更新为您将 BaseModel
扩展到的模型。当您执行 Model::all()
或 Model::get()
时,您会自动获取该模型上的 company_id,并且您还可以根据您的请求执行搜索点`
希望这有帮助。
关于mysql - 为 Laravel 中的所有 SQL 请求添加 WHERE 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18123995/