从MySql数据库中删除JSON对象值Laravel

从MySql数据库中删除JSON对象值Laravel,laravel,Laravel,我想通过eloquent从mysql数据库中删除JSON对象值。我试过使用这段代码,它可以工作,但我必须传递数组键“$.language[1]” 以下是存储在数据库中的JSON对象{“名称”:“指环王:指环团契”,“语言”:[“印地语”,“英语”,“西班牙语”]} 在这里,我想从所有记录中删除Englishlanguage <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Book; u

我想通过eloquent从mysql数据库中删除JSON对象值。我试过使用这段代码,它可以工作,但我必须传递数组键
“$.language[1]”

以下是存储在数据库中的JSON对象<代码>{“名称”:“指环王:指环团契”,“语言”:[“印地语”,“英语”,“西班牙语”]}

在这里,我想从所有记录中删除
English
language

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Book;
use DB;

class BookController extends Controller
{

    public function store(){

        $book = new Book;       
        $book->attributes = $jsonAttr;
        $book->save();
        echo "Book saved";
        die;
    }

    public function updateLanguage()
    {           
         $result = Book::where('attributes->language','LIKE','%English%')->update(['attributes' => DB::raw('JSON_REMOVE(attributes, "$.language[1]")')]);

        //$result = Book::where('attributes->language','LIKE','%H%')->get();         
        echo "<pre>";
        print_r($result);
        die;
    }
}

将json转换为数组需要json\u解码:

使用unset删除数组中的“English”:


之后,您可以将数组转换为json进行json_编码

Where condition从数据库中获取所有匹配记录。您需要循环此查询以删除特定的图书语言。请尝试此代码

公共函数updateLanguage()
{   
//从数据库中获取所有匹配的记录
$result=Book::where('attributes->language','LIKE','%')->get();
//循环项目以获取唯一id
foreach($key=>$val的结果){
$id=$val['id'];
$attr=json_decode($val->attributes,true);
$data=$attr['language'];
foreach($itemkey=>$lang的数据){
如果($lang==“英语”){
//传递唯一id以从书本记录中删除语言
$result=Book::where('id',$id)->update(['attributes'=>DB::raw('JSON_REMOVE(attributes,“$.language['.$itemkey.]]));
}
}
}
$result=Book::where('attributes->language','LIKE','%')->get();
foreach($结果为$key=>$value){
打印($value['attributes');
回声“
”;
public function updateLanguage()
{   
    //Get all matched records from database
    $result = Book::where('attributes->language','LIKE','%')->get();
    //Loop items to get unique id
    foreach($result as $key => $val){           
            $id = $val['id'];
            $attr = json_decode($val->attributes, true);
            $data = $attr['language'];  

            foreach($data as $itemkey => $lang){
                if($lang == "English"){                         
                    //Pass unique id to remove language from book record
                    $result = Book::where('id',$id)->update(['attributes' => DB::raw('JSON_REMOVE(attributes, "$.language['.$itemkey.']")')]);          
                }
            }
    }

    $result = Book::where('attributes->language','LIKE','%')->get();     
    foreach ($result as $key => $value) {
        print_r($value['attributes']);  
        echo "<br>";
    }

    die;
}
} 死亡 }
谢谢,我已经知道了拉威尔的
情况。在这个where条件下,您获取了特定的图书记录,然后更新了它的语言。我希望通过laravel更新mysql数据库中的json对象,您建议的想法是不正确的。