它没有在数据透视 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()
方法将删除所有不再在您的工单中的用户,并自动添加新用户。
我正在使用 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()
方法将删除所有不再在您的工单中的用户,并自动添加新用户。