Удалить значение объекта JSON Laravel из базы данных MySql - PullRequest
1 голос
/ 07 мая 2019

Я хочу удалить значение объекта JSON из базы данных mysql через eloquent.Я пытался с этим кодом, он работает, но я должен передать ключ массива "$.language[1]".

Вот объект JSON {"name":"The Lord of the Rings:The Fellowship of the Ring","language":["Hindi","English","Spanish"]}, хранящийся в базе данных.

Здесь я хочу удалить Englishязык из всех записей.

<?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;
    }
}

Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Где условие получить все записи о совпадении из базы данных.Вам нужно зациклить этот запрос, чтобы удалить определенный язык книги.Попробуйте этот код ...

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;
}
0 голосов
/ 07 мая 2019

Вам нужен json_decode для преобразования json в массив: ссылка

Вы удаляете «Английский» в массиве с unset: ссылка

После этогоВы можете json_encode для преобразования массива в JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...