【问题标题】:Delete one of data JSON from Database从数据库中删除数据 JSON 之一
【发布时间】:2017-12-14 23:45:41
【问题描述】:

我想从数据库中删除 JSON 但我不能

我在控制器中的删除功能:

public function deletephoto($id)
    {
        $product = $this->productRepository->findWithoutFail($id);
        $photo = json_decode($product->photo_list,true);
        $photos = $photo[$id-1];
        unset($photos);
        $product->save();

        Flash::success('Photo deleted successfully.');

        return back();
    }

更新 这是我的编辑控制器:

public function edit($id)
    {
        $product = $this->productRepository->findWithoutFail($id);
        $store = Store::pluck('name', 'id')->all();
        $photo = json_decode($product->photo_list);
        //dd($photo);
        
        $category = Category::pluck('name','id')->all();
        if (empty($product)) {
            Flash::error('Product not found');

            return redirect(route('products.index'));
        }

        return view('products.edit',compact('product','store','category','photo'));
    }

这里是我的视图blade.php。我正在使用按钮删除它。

@foreach($photo as $pro)
<div style="margin-right:10px" class="form-group col-sm-1">
     <p><img src="{{ env('FRONTEND_URL') . "/img/products/$product->id/$pro->name"}}"  width="100" height="100"/></p>
     <a href="{!! route('products.deletephoto', [$pro->id]) !!}" class='btn btn-default btn-xs' onclick="return confirm('Are you sure?')">Delete</a>
</div>
@endforeach

我单击删除按钮,但它不起作用。

最新更新

我的删除功能

public function deletephoto($productid,$photoid)
    {
        $product = $this->productRepository->findWithoutFail($productid);
        $photo = json_decode($product->photo_list,true);

        foreach($photo as $key => $value) {
                if($value['id'] == $photoid) { 

                unset($photo[$key]);

                }
        }
        
        
        return back();
    }

我的观点blade.php

@foreach($photo as $pro)
<div style="margin-right:10px" class="form-group col-sm-1">
     <p><img src="{{ env('FRONTEND_URL') . "/img/products/$product->id/$pro->name"}}"  width="100" height="100"/></p>
     <a href="{!! route('products.deletephoto', [$product->id,$pro->id]) !!}" class='btn btn-default btn-xs' onclick="return confirm('Are you sure?')">Delete</a>
</div>
@endforeach

我使用了那个代码,但它也不起作用......

【问题讨论】:

  • 您是要从该 JSON 对象数组还是整个对象中删除单个元素?
  • @jigar shah yeahh

标签: php json database laravel-5.3


【解决方案1】:

目前您正在使用$id 获取photo_list 列,并尝试使用相同的$id 将其删除,这就是它不起作用的原因。假设$id是23,那么你的photo_list的json数组中没有23个id

现在,如果您想删除 en 元素,您需要拥有单个图像的 id,使用 id 您可以像这样删除:

从所有数组中删除键

foreach($photo as $key => $value) {
   if($value['id'] == '1') { // assumed 1 to be removed
    unset($photo[$key]);
   }
}

如果要删除整个 JSON,可以将 photo_list 列的值更新为 NULL

编辑

请查看以下示例:

$photo ='[{"id": "1","name": "test"},{"id": "2","name": "test"}]';
$photo_obj = json_decode($photo,true); // to get array
$result =[];
foreach($photo_obj as $key => $value) {
    if($value['id'] != '1') { // assumed id = 1 to be removed
        $result[] = $value;
    }
}

print_r(json_encode($result));

【讨论】:

  • 您遵循第一部分,请根据编辑示例更新您的代码。您的代码适用于从单个数组中删除单个键,例如:name
  • 但是......我想要的是从所有数组中删除一个键......,例如:[{“id”:“1”,“name”:“bunga4.jpg” }, {"id": "2", "name": "bunga5.jpg"}]...,我想删除第一个 id ....结果为 [{"id": "2", " name": "bunga5.jpg"}] 但是怎么做?你能帮我请 Jigar Shah 吗?
  • 如果您粘贴我的 EDIT 代码,它与您所解释的情况相同,只需粘贴到普通 php 文件中并测试 o/p
【解决方案2】:

好像你的函数,findWithoutFail($id) 找不到$id

尝试转储$product$photo,看看它是否真的返回$id的数据

【讨论】:

  • 没有失败...我得到 $id.and 我从我的 photo_list 列中获取数据数组....但我不能删除它....这让我很困惑跨度>
猜你喜欢
  • 2021-07-25
  • 1970-01-01
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 2013-05-28
  • 2018-06-19
相关资源
最近更新 更多