Как обновить значение ключа JSON в Laravel - PullRequest
0 голосов
/ 24 января 2019

мы пытаемся обновить значение ключа данных json. Мы храним запись в базе данных product_name столбец типа

{"ar": "арабский продукт", "en": ""}

мы пытаемся достичь этого, оба ниже двух метода

DB::table('products')
        ->where('id', 1)
        ->update(['productname->en' => 'english product']);

$post = product::find($product_id);
        $post->product_name = [$language => $edittitle];
        $post->save();

мы хотим обновить значение ключа json en.

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Быстрое и простое решение для обновления всех записей за один раз:

Product::each(function ($product) {
    $productName = json_decode($product->product_name, true);
    $productName['en'] = 'english product';
    $product->product_name = json_encode($productName);
    $product->save();
});

Если вы хотите обновить один продукт, это должно работать:

$product = Product::find($product_id);
$productName = json_decode($product->product_name, true);
$productName['en'] = 'english product';
$product->product_name = json_encode($productName);
$product->save();
0 голосов
/ 24 января 2019

Прежде всего, создайте это поле с правильным типом в файле миграции, ключевое слово, которое нам нужно, это json:

...
$table->json('productname');
...

Тогда нам нужно cast этот атрибут справавведите при извлечении его как Eloquent model, используя атрибут $casts на самой модели:

...
   /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'productname' => 'array'
    ];
...

Затем мы можем получить доступ и сохранить данные для этого атрибута следующим образом:

$myModel = product::find(1);
$myModel->productname['en'] = 'something';
// or
$myModel->productname = ['en' => 'something']; // This will override the whole attribute

Для получения более подробной информации вы можете посмотреть на: https://laravel.com/docs/5.7/eloquent-mutators#attribute-casting

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