У меня есть модель с именем Report, которая имеет отношение «один ко многим» с другой моделью с именем ReportAttachments.
В моем классе ReportCrudController у меня есть следующее поле для добавления или управления вложениями.
$this->crud->addField([ // Browse multiple
'name' => 'attachments',
'label' => 'Image Attachments',
'type' => 'browse_multiple',
'multiple' => true, // enable/disable the multiple selection functionality
'mime_types' => ['image'], // visible mime prefixes; ex. ['image'] or ['application/pdf']
'model' => 'App\Models\ReportAttachment',
'attribute' => 'id',
'entity' => 'attachments'
]);
Однако я не могу заставить его работать, так как я получаю эту ошибку во время редактирования:
"Свойство [attachments] не существует в этом экземпляре коллекции."
Кроме того, при создании нового отчета генерируется пустой запрос вставки для вложений, который вызывает исключение:
"SQLSTATE [HY000]: общая ошибка: поле 1364 'file 'не имеет значения по умолчанию (SQL: вставить в report_attachments
() values ()) "
Это код для модели отчета:
class Report extends Model
{
use CrudTrait;
protected $table = 'reports';
protected $fillable = ['name', 'slug', 'description', 'impression'];
protected $casts = [
'attachments' => 'array',
];
public function attachments()
{
return $this->hasMany('App\Models\ReportAttachment');
}
}
Код для модели вложения
class ReportAttachment extends Model
{
protected $table = 'report_attachments';
protected $primaryKey = 'id';
protected $fillable = ['file', 'title', 'file_type'];
public $timestamps = false;
public function report()
{
return $this->belongsTo('App\Models\Report');
}
}
Я что-то упустил или здесь что-то не так?Заранее спасибо!
Обновление: добавлено определение таблицы и обновлено пространство имен для модели ReportAttachment
CREATE TABLE `reports` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`slug` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`description` longtext COLLATE utf8mb4_unicode_ci,
`impression` enum('0','1','2') COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `reports_name_unique` (`name`),
UNIQUE KEY `reports_slug_unique` (`slug`)
) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Таблица report_attachments:
CREATE TABLE `report_attachments` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT '',
`file` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`file_type` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`report_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `report_attachments_report_id_foreign` (`report_id`),
CONSTRAINT `report_attachments_report_id_foreign` FOREIGN KEY (`report_id`) REFERENCES `reports` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;