mysql - 为 Laravel 中的所有 SQL 请求添加 WHERE 条件

标签 mysql laravel eloquent

我正在为在 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/

相关文章:

php - 选择提交表单的id以放入jquery变量

PHP GET ($_GET) 总是打印变量的名称而不是值

java - JPA Hibernate更新界面中的查询

laravel - 如何按输入顺序返回最后 n 条记录

php - Laravel MorphToMany 不适用于多列

php - 用于移动访问的 Web 服务和数据库

php - Laravel 连接 mysql 时出现问题

php - 将对象的对象转换为对象数组(PHP、Laravel)

laravel - Eloquent : How to get a model that has the count of a related model exactly n with a condition?

mysql - Eloquent 获取关系计数等于列值的行