它没有在数据透视 table 中更新数据,而是在 laravel 中插入新记录

Instead of updating data in pivot table it insert new record in laravel

我正在使用 laravel 5.4

我创建了 3 个 table:
门票
ticket_cc_users
用户

tableticket_cc_users作为支点table.

在下面的代码中,我想更新我的数据透视表 table。但是,当我 运行 更新查询时,它会将数据插入我的数据库而不是更新它。

$ticket = Ticket::find($id);
$ticket->requester_id = $this->user['id'];
$ticket->type = $request->type;
$ticket->priority = $request->priority;
$ticket->subject = $request->subject;
$ticket->description = $request->description;
$ticket->status = $request->status;     
if($ticket->save())
{
    for($i=0;$i<count($request->cc_id);$i++)
    {
        $ticket->users()->attach($request->cc_id[$i]['id'],['ticket_id'=>$ticket->id]);
    }           
}

门票型号:

public function users()
{
    return $this->belongsToMany('App\User','ticket_cc_users');
}

用户模型:

public function tickets()
{
    return $this->belongsToMany('App\Models\Tickets\Ticket','ticket_cc_users');
}

我应该怎么做才能让我的代码做我想做的事?

attach() 方法将在您的数据透视表 table 中创建一条新记录。要更新现有记录:

$ticket->users()->updateExistingPivot($userID, $arrayOfColumnsYouWantToUpdate);

我不确定你的 $request->cc_id 是什么意思,但在我的示例中,如果你可以将 $userID 设置为要更新的用户的 ID 和方法中的下一个参数updateExistingPivot() 是要更新的数据透视表 table 中的列的数组。

编辑

如果你想更新与工单相关的用户,用这个替换你的 for 循环:

$userIDs = [];

for($i=0;$i<count($request->cc_id);$i++)
{
    $userIDs[] = $request->cc_id[$i]['id'];
}

$ticket->users()->sync($userIDs);

sync() 方法将删除所有不再在您的工单中的用户,并自动添加新用户。