我正在使用 Eloquent attach()
方法将关系数据插入数据透视表:
$this->user->roles()->attach($role, ['user_id' => $user]);
上面一行将数据插入到一个数据透视表中,该数据透视表链接了用户及其在我的应用中的角色。
问题是我有一个特征设置,每次执行查询时都将 cust_id
值插入到数据库表中。当我使用 attach
方法时,永远不会插入 cust_id
值。但是,它适用于所有其他方法,例如 create
、insert
等。
我的特征文件:
<?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/