我使用Eloquent attach()
方法将关系数据插入数据透视表:
$this->user->roles()->attach($role, ['user_id' => $user]);
以上行将数据插入到我的应用中链接用户及其角色的数据透视表中。
问题是我有一个特征设置,每次执行查询时都会在数据库表中插入cust_id
值。当我使用cust_id
方法时,attach
值永远不会被插入。但是,它适用于所有其他方法,例如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 - 在您提出要求之前,我use MultiTenantTrait
位于所有模型的顶部。
答案 0 :(得分:2)
正如我在评论中所说,这不起作用,因为它取决于insert
受到重创。问题是数据透视表没有自己的模型,因此没有insert
方法。
如果您需要将cust_id
插入数据透视表,attach
需要一些额外的参数来执行此操作。
$this->user->roles()->attach($role, ['user_id' => $user, 'cust_id' => Session::get('cust_id')]);