Мне нужно добавить дополнительный столбец в system_files
Таблица. Я бы предпочел не изменять эту таблицу, поэтому я решил добавить новую таблицу с одним столбцом, а затем расширить System\Models\File
модель с hasOne
отношения. Поэтому я создал новую таблицу под названием myname_plugin_tag
с двумя полями: file_id
а также title
и создал новый файл для модели под названием Tag
:
class Tag extends Model
{
use \October\Rain\Database\Traits\Validation;
/*
* Validation
*/
public $rules = [
];
/*
* Disable timestamps by default.
* Remove this line if timestamps are defined in the database table.
*/
public $timestamps = false;
/**
* @var string The database table used by the model.
*/
public $table = 'myname_plugin_tag';
}
И в boot
Метод моего плагина у меня есть:
System\Models\File::extend(function($model){
$model->hasOne['tag']=[
'MyName\Plugin\Models\Tag',
'key' => 'file_id',
'timestamps' => 'false'
];
});
Кажется, это все, что мне нужно сделать. Но при сохранении файла с новыми отношениями, которые я определил, я получаю сообщение об ошибке.
$user = Auth::getUser();
$tag = new Tag;
$tag->title = 'some tag';
$file = new File;
$file->data = Input::file('catalog');
$file->title = Input::get('title');
$file->tag = $tag; // => This line is the culprit. If I comment it, the exception will not raise
$user->files = $file;
$user->save();
Исключение:
Вызов неопределенного метода October \ Rain \ Database \ QueryBuilder :: withTimestamps ()
E: \ Development \ git \ catalog-manager \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Query \ Builder.php строка 2123
Если я уберу строку 'timestamps' => 'false'
исключение исправляется и $file
модель будет сохранена, но $tag
модель еще не сохранена.
С помощью $file->tag()->save($tag)
работает и сохраняет тег! Но проблема не решена. Я не могу получить доступ к сохраненному свойству через тег $ user-> files [0] -> и получить эту ошибку:
Попытка получить свойство необъекта
Выход из {{dump($user->files[0])}}
ясно показывает, что tag
свойство не было добавлено к File
модель:
id integer
disk_name string
file_name string
file_size integer
content_type string
title string
description NULL
field string
sort_order integer
created_at string
updated_at string
path string
extension string
Так что кажется, что File
модель не знает о новом tag
имущество добавлено к нему. Я что-то пропустил?
Задача ещё не решена.
Других решений пока нет …