gpt4 book ai didi

mysql - 而是在 Laravel 中插入新记录,而不是更新数据透视表中的数据

转载 作者:行者123 更新时间:2023-11-29 11:00:09 25 4
gpt4 key购买 nike

我正在使用 laravel 5.4

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

ticket_cc_users用作数据透视表。

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

$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() 方法将在数据透视表中创建一条新记录。要更新现有记录:

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

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

编辑

如果您想更新与票证相关的用户,请将 for 循环替换为以下循环:

$userIDs = [];

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

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

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

关于mysql - 而是在 Laravel 中插入新记录,而不是更新数据透视表中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42409451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com