Php 如果ID相同,如何逐个删除项目?
我正在开发购物车,当我添加两个相同ID的项目时,当我单击删除其中一个项目时,它会删除两个项目。如何逐一删除?我和拉威尔一起发展 这是删除功能:Php 如果ID相同,如何逐个删除项目?,php,laravel,Php,Laravel,我正在开发购物车,当我添加两个相同ID的项目时,当我单击删除其中一个项目时,它会删除两个项目。如何逐一删除?我和拉威尔一起发展 这是删除功能: public function delete(Request $request, $id) { $products = session('cart'); foreach ($products as $key => $value) { if ($value['id'] == $id) {
public function delete(Request $request, $id)
{
$products = session('cart');
foreach ($products as $key => $value)
{
if ($value['id'] == $id)
{
unset($products [$key]);
}
}
$request->session()->remove('cart');
Session::forget('ticket');
$request->session()->put('cart',$products);
flash()->success('Prekė buvo sėkmingai pašalinta iš krepšelio.');
return redirect()->back();
}
由于您没有停止循环,因此最终将取消设置所有具有该ID的产品。请执行以下操作:
public function delete(Request $request, $id)
{
$products = session('cart');
foreach ($products as $key => $value) {
if ($value['id'] == $id) {
unset($products [$key]);
break;
}
}
$request->session()->remove('cart');
Session::forget('ticket');
$request->session()->put('cart',$products);
flash()->success('Prekė buvo sėkmingai pašalinta iš krepšelio.');
return redirect()->back();
}
但是,由于您也在项目上添加了额外的文本,我建议您更具体地说明需要删除的项目:
public function delete(Request $request, $id, $text)
{
$products = session('cart');
foreach ($products as $key => $value) {
if ($value['id'] == $id && $value['text'] == $text) {
unset($products[$key]);
break;
}
}
$request->session()->remove('cart');
Session::forget('ticket');
$request->session()->put('cart',$products);
flash()->success('Prekė buvo sėkmingai pašalinta iš krepšelio.');
return redirect()->back();
}
第二个建议只是我的猜测。想法是您的真实项目
$id
由数据库id和文本组成,这两个id应该唯一地标识产品。由于您没有停止循环,您最终将取消设置所有具有该id的产品。请执行以下操作:
public function delete(Request $request, $id)
{
$products = session('cart');
foreach ($products as $key => $value) {
if ($value['id'] == $id) {
unset($products [$key]);
break;
}
}
$request->session()->remove('cart');
Session::forget('ticket');
$request->session()->put('cart',$products);
flash()->success('Prekė buvo sėkmingai pašalinta iš krepšelio.');
return redirect()->back();
}
但是,由于您也在项目上添加了额外的文本,我建议您更具体地说明需要删除的项目:
public function delete(Request $request, $id, $text)
{
$products = session('cart');
foreach ($products as $key => $value) {
if ($value['id'] == $id && $value['text'] == $text) {
unset($products[$key]);
break;
}
}
$request->session()->remove('cart');
Session::forget('ticket');
$request->session()->put('cart',$products);
flash()->success('Prekė buvo sėkmingai pašalinta iš krepšelio.');
return redirect()->back();
}
第二个建议只是我的猜测。想法是你真正的物品$id
由数据库id和文本组成,这两个标识应唯一标识产品。为什么有两个标识相同的项目….?如何定义两个标识之间的差异?取消设置后执行中断,这将删除具有该标识的第一个产品,但通常具有唯一标识和数量,而不是具有相同标识的多个产品。(只是想一想).Hmm…商店里有一个项目。我可以在上面写文本。因此我可以在上面添加不同的文本。但是它们的id与数据库中的相同。你必须找到一种方法,将它们以不同的id-s插入数据库中,因为你会面临这个问题。为什么你有两个具有相同id的项目…?你如何定义这两个id-s之间的差异?abreak
在您取消设置后,这将删除第一个具有该ID的产品,但其典型特征是具有唯一ID和数量,而不是具有相同ID的多个产品。(请仔细考虑).Hmm…商店里有一件物品。我可以在上面写文字。因此我可以在上面添加不同的文字。但是它们的id与数据库中的相同。你必须找到一种方法,以不同的id-s将它们插入数据库中,因为你将面临这个问题