#laravel
#laravel
Вопрос:
Я пытаюсь вставить classname ie. App ModelsCustomerImport в таблицу с помощью следующего кода:
$import = Import::create([
'type' => $type, \evaluates to AppModelsCustomerImport
'campaign_id' => session('activeCampaign'),
'filename' => $filename,
'original_filename' => $originalFilename,
'extra_attributes' => $extraAttributes,
]);
Я получаю ошибку, Add [type] to fillable property to allow mass assignment on [AppModelsCustomerImport].
У кого-нибудь есть идея, почему это может происходить?
РЕДАКТИРОВАТЬ, чтобы устранить путаницу, Import и CustomerImport — это две разные модели. Я пытаюсь вставить данные в таблицу импорта, используя модель импорта. Один из столбцов — это type, который должен быть classname . Модель импорта приведена ниже
class Import extends Model
{
use LogsActivity;
use HasChildren;
protected $fillable = [
'campaign_id',
'type',
'filename',
'original_filename',
'rows_total_count',
'rows_success_count',
'rows_error_count',
'processed_at',
'failed_at',
'pruned_at',
];
}
РЕШЕНИЕ
Я, наконец, разобрался с проблемой. Я использую код импорта csv члена команды в свое приложение. В импорте и пользовательском импорте он использовал родительский пакет от Калеба Порцио, . Это дает возможность получить доступ к дочерней модели из родительской и наоборот. Для этого модель CustomerImport расширяет модель импорта, однако я этого не заметил, и моя расширяла модель по умолчанию, отсюда и ошибка.
Комментарии:
1. Можете ли вы поделиться своей моделью
Import
?2. В документации есть информация о массовом присвоении. Просто добавьте
type
в$fillable
массив3. В сообщении об ошибке указано: добавить
type
столбец в заполняемое свойство в вашейAppModelsCustomerImport
модели4. Я добавил уточнение. CustomerImport и Import — это две разные модели. Я пытаюсь вставить данные в таблицу импорта, используя модель импорта, которая имеет заполняемый атрибут ‘type’
Ответ №1:
Вы должны добавить type
в класс заполняемое свойство в вашей модели.
App Models CustomerImport
class CustomerImport extends Model {
...
public $fillable = ['type','campaign_id','filename','original_filename','extra_attributes'];
...
}
Или вы можете добавить $guarded
свойство, которое позволяет заполнять все свойства.
class CustomerImport extends Model {
...
protected $guarded = [];
...
}
Ответ №2:
В eloquent ORM атрибут $fillable представляет собой массив, содержащий все те поля таблицы, которые могут быть заполнены с помощью массового присваивания.
Массовое присвоение относится к отправке массива в модель для непосредственного создания новой записи в базе данных.
class CustomerImport extends Model
{
protected $fillable = [
'type',
'campaign_id',
'filename',
'original_filename',
'extra_attributes'
];
}
Это должно было решить проблему.