我正在为每个在Laravel中拥有一组用户的公司创建一个在线工具。
当用户连接时,他有一个$connected_company_id
变量
对于每个SELECT请求(由:: all(),find(),...)调用,我想添加条件:where company_id = $connected_company_id
。我找到了这篇文章:laravel set an automatic where clause,但它不能通过覆盖newQuery()来实现。
对于每个INSERT请求,我想添加company_id。
这可能而不更改所有控制器中的代码吗?
我考虑过使用customEloquent
扩展Eloquent,然后让我的模型扩展customEloquent
,但我不知道如何编写customEloquent的代码以及它是否可行。
答案 0 :(得分:1)
好吧,你可以利用Eloquent模型事件。我假设您已将connected_company_id存储在会话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,并且您还可以按照Point上的要求执行搜索。
希望这会有所帮助。
答案 1 :(得分:0)
好吧,您可以将公司ID添加到查询查询中。
Model::where("company_id","=",$company_id):
或者您可以创建范围:
class theModel extends Eloquent {
static $company_id;
static for_company($company_id){
self::company_id=$company_id;
return __CLASS__;
}
public function scopeCompany($query)
{
return $query->where('company_id', '=', self::company_id);
}
}
//And later
$scope=theModel::for_company($company_id);
$res=$scope::company->where(...);
免责声明:我没试过这个。只是我构建的解决方案。让我知道这个是否奏效。这在PHP 5.3
下无效