从MySql数据库中删除JSON对象值Laravel
我想通过eloquent从mysql数据库中删除JSON对象值。我试过使用这段代码,它可以工作,但我必须传递数组键从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
“$.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对象,您建议的想法是不正确的。