php - Laravel/Eloquent attach() 方法绕过了我的 Multi-Tenancy 特征

标签 php laravel laravel-5

我正在使用 Eloquent attach() 方法将关系数据插入数据透视表:

$this->user->roles()->attach($role, ['user_id' => $user]);

上面一行将数据插入到一个数据透视表中,该数据透视表链接了用户及其在我的应用中的角色。

问题是我有一个特征设置,每次执行查询时都将 cust_id 值插入到数据库表中。当我使用 attach 方法时,永远不会插入 cust_id 值。但是,它适用于所有其他方法,例如 createinsert 等。

我的特征文件:

<?php 

namespace App\Scopes;
use Session;

trait MultiTenantTrait
{
    /**
     * Constructor.
     * 
     * @return void
     */
    public function __construct($attributes = array())
    {
        parent::__construct(array_merge($attributes, ['cust_id' => Session::get('cust_id')]));
    }

    /**
     * Append `cust_id` to all insert statements.
     * 
     * @return void
     */
    public function insert($attributes = array())
    {
        foreach($attributes as $key => $value) 
        {
            $attributes[$key]['cust_id'] = Session::get('cust_id');
        }

        return parent::insert($attributes);
    }

    /**
     * Boot the scope.
     * 
     * @return void
     */
    public static function bootMultiTenantTrait()
    {
        static::addGlobalScope(new MultiTenantScope());
    }

    /**
     * Get all tenants.
     * 
     * @return string
     */
    public static function allTenants()
    {
        return (new static())->newQueryWithoutScope(new MultiTenantScope());
    }
}

问题是我的特征(上面)中的 insert() 方法没有被触发。有谁知道为什么吗?

有解决办法吗?

PS - 在你问之前,我已经在所有模型的顶部使用 MultiTenantTrait

最佳答案

正如我在评论中所说,这不起作用,因为它取决于 insert 是否被命中。问题是数据透视表没有自己的模型,所以没有 insert 方法。

如果您需要将 cust_id 插入到数据透视表中,attach 需要一些额外的参数来执行此操作。

$this->user->roles()->attach($role, ['user_id' => $user, 'cust_id' => Session::get('cust_id')]);

关于php - Laravel/Eloquent attach() 方法绕过了我的 Multi-Tenancy 特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32333449/

相关文章:

php - 如何存储事件的多个日期范围?

php - Laravel 的输入 :all() ignores disabled inputs

php - Laravel PHPUnit 加载 .env.testing 文件

php - 如何使 php 真正与 https 站点一起工作?

javascript - 通过 PHP 或 Java 显示 HTML 源代码

mysql - 使用复杂的 AND OR 将 SQL 转换为 Laravel 查询生成器

php - 是否可以在一行中保存一对多关系 Laravel Eloquent

php - 在 Laravel 中,有没有办法找出 `firstOrCreate` 是否已创建或是否找到了该行?

php - 使用 PDO 插入空条目,bindparam 失败

php - 从数据库表中提取字段数据的简单函数