В своем плагине для поста добавил поле Checkbox list с вариантами выбора, добавил для него в таблице mysql поле paid_free с типом string , при выборе одного или нескольких вариантов выдает ошибку ("Unexpected type of array when attempting to save attribute "paid_free", try adding it to the $jsonable property.")
В модели поста я добавил protected $jsonable = ['paid_free']; после чего варианты options стали улетать в базу с видом ["ОМС","ДМС"].
На сайте в посте стало выдавать ошибку An exception has been thrown during the rendering of a template ("Array to string conversion").
И далее у меня проблема в том как вернуть в обратный вид, чтобы вывод на сайте работал.
Я пробовал добавить
protected $casts = [
'paid_free' => 'array',
];
но выдает другую ошибку json_decode(): Argument #1 ($json) must be of type string, array given
Я начинаю только в разработке и возможно что-то где то глупо, что-то не понимаю
общий вид модели
<?php namespace project\Service\Models;
use Model;
/**
* Item Model
*
* @link https://docs.octobercms.com/3.x/extend/system/models.html
*/
class Item extends Model
{
protected $jsonable = ['paid_free'];
/**
* @var string table name
*/
public $table = 'project_service_items';
/**
* @var array relation
*/
public $belongsTo = [
'category' => ['project\service\models\Category']
];
protected $casts = [
'paid_free' => 'array',
];
}
Компонент поста
<?php namespace project\Service\Components;
use Cms\Classes\ComponentBase;
/**
* Item Component
*
* @link https://docs.octobercms.com/3.x/extend/cms-components.html
*/
class Item extends ComponentBase
{
public function componentDetails()
{
return [
'name' => 'Item Component',
'description' => 'No description provided yet...'
];
}
/**
* @link https://docs.octobercms.com/3.x/element/inspector-types.html
*/
public function defineProperties()
{
return [
'slugCategory' => [
'title' => 'Ссылка на категории',
'default' => '{{ :category }}',
],
'slugItem' => [
'title' => 'Ссылка услуги',
'default' => '{{ :item }}',
],
];
}
public function onRun()
{
$category = \project\service\models\category::where('slug', $this->property('slugCategory'))->first();
if (empty($category)){
return $this->controller->run('404');
}
$item = \project\service\models\item::where('category_id', $category->id)->where('slug', $this->property('slugItem'))->first();
if (empty($item)){
return $this->controller->run('404');
}
$this->page['item'] = $item;
}
}
в фронте вывожу {{ item.paid_free }}
Возможно название указал некорректно