Хранение нескольких значений массива в виде столбца JSON в Laravel - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь сохранить значения форм из набора полей с одинаковыми именами в типе столбца JSON.


<?php
//Form values as an array
$title = request('title');
$price = request('price');
$link = request('link');

 $arrM = array();

 for($i = 0; $i < count($title); $i++) {
    $arrM[] = array(
       'title' => $title[$I], 
       'price' => $price[$I],
       'link' => $link[$i],    
    );
 }

 Tag::create([
  'title' => request('title'),
  'tag_points' => $arrM,
 ]);

Я взял каждое значение и объединил в массив и установил приведение как array.Laravel не примет формат ниже

$ arrM - Вывод

array:2 [▼
  0 => array:3 [▼
    "title" => "First Title"
    "price" => "10"
    "link" => "https://google.com"
  ]
  1 => array:3 [▼
    "title" => "Second Title"
    "price" => "40"
    "link" => "https://stackoverflow.com"
  ]
]

Ошибка

Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, string given

Как бы я хотел, чтобы он хранился в столбце БД

[{
    "title": "First Title",
    "price": "10",
    "link": "https://google.com"
}, {
    "title": "Second Title",
    "price": "40",
    "link": "https://stackoverflow.com"
}]

1 Ответ

0 голосов
/ 03 марта 2019

Чтобы сохранить поля JSON, в своих миграциях вы должны сделать что-то вроде:

$table->json('field')

Затем, если вы хотите получить эти значения, вы должны преобразовать это значение из JSON в Array.Вы можете сделать это, используя свойство $ casts.

class YourModel extends Model
{
    protected $casts = [
        'field' => 'array'
    ];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...