2

我正在为在 Laravel 中拥有一组用户的公司创建一个在线工具。

当用户连接时,他有一个$connected_company_id变量

  • 对于每个 SELECT 请求(由 ::all()、find()、...调用),我想添加条件:where company_id = $connected_company_id。我找到了这篇文章:laravel 设置了一个自动 where 子句,但它不能通过覆盖 newQuery() 来工作。

  • 对于每个 INSERT 请求,我想添加 company_id。

在不更改所有控制器内的代码的情况下这是否可能?

我想过用 扩展 Eloquent customEloquent,然后让我的模型扩展customEloquent,但我不知道如何为 customEloquent 编写代码以及它是否可以工作。

4

2 回答 2

1

好吧,您可以使用 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 模型事件以获取更多信息。

上面的代码会自动将 company_id 插入或更新到您扩展的模型BaseModel。当您执行Model::all()orModel::get()时,您会自动获取该模型上的 company_id 并且您还可以按照您在 Point 上的请求执行搜索

希望这可以帮助。

于 2013-08-08T13:54:14.237 回答
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 下不起作用

于 2013-08-08T10:57:00.570 回答