Laravel 5.5;使用3个复合主键在3向数据透视表上重复输入

时间:2017-11-30 09:23:47

标签: php mysql laravel eloquent

我正在尝试将数据附加到我的3向数据透视表(由user_id,respondent_id和company_id组成,它们一起是复合主键)。

当表格中已存在数据时,我会收到重复的密钥消息(duh)

我试图通过使用syncWithoutDetaching来阻止这种情况,但它仍会抛出重复的密钥消息

我尝试做的是以下内容:

class Respondent extends Authenticatable
{
    public function companies()
    {
        return $this->belongsToMany('App\Models\Company', 'company_user_respondent');
    }
    public function attachPivot($company_id, $user_id)
    {
        //This will attach but if the keys exist it will send a duplication error
        return $this->companies()->attach($company_id, ['user_id' => $user_id]);
    }
}

此外,我尝试使用attachPivot方法

public function attachPivot($company_id, $guide_id)
{
    //Will allso send a duplication error, using just sync works but of course it will clean up my table which is not the goal.
    return $this->companies()->syncWithoutDetaching([1 => ['company_id' => $company_id, 'guide_id' => $guide_id]]);
}

我可以查看我的数据库,如果记录存在,但每次进行查询都不是我理想的目标,我理想的目标是不会抛出错误而不会抛出错误或同步表而不分离。

1 个答案:

答案 0 :(得分:0)

发现我可以通过执行以下操作来阻止这种情况

try {
    return $this->companies()->attach($company_id, ['user_id' => $user_id]);
} catch (QueryException $exception) {
    return $exception;
}

现在它将返回一个我可以检查或附加指定值的异常。