Полиморфное отношение Laravel 5.8 `nullableMorphs` не работает
У меня есть таблица для вложений, которая имеет полиморфную связь с другими таблицами. Я хочу загрузить файл при выборе файла и вставить его вattachments
table, но эта запись не связана ни с одной родительской таблицей, пока не будет создана родительская запись, поэтому для этих двух полей attachable_id
, а также attachable_type
должно допускать значение NULL. Ниже приведена миграция таблицы вложений:
schema::table('attachments', function (Blueprint $table) {
$table->nullableMorphs('attachable');
});
Но когда я создаю запись вложения, появляется ошибка.
$attachment = new Attachment();
$attachment->name = 'name';
.........
.........
$attachment->save();
"message": "SQLSTATE[HY000]: General error: 1364 Field 'attachable_id' doesn't have a default value
3 ответа
Форма Laravel GitHub вопросы:
Это просто помощник для самого простого случая определения столбцов идентификатора морфинга и типа морфинга. Если вам нужно больше контроля, их можно назначить индивидуально.
Лучше делать это вручную,
$table->unsignedInteger('attachable_id')->nullable();
$table->string('attachable_type')->nullable();
Использовать attachable_id
в заполняемом массиве в Attachment
модель.
class Attachment extends Model
{
protected $fillable = ['attachable_id'];
}
Примечание: убедитесь, что в таблице attachable_id допускает значение NULL.
Вам нужно будет указать fillable
атрибут на модели
class Attachment extends Model
{
//only the field names inside the array can be mass-assign
protected $fillable = ['attachable_id'];
}
Подробнее: Что означает "массовое назначение" в Laravel ( ссылка)
При миграции вы можете сделать это, чтобы сделать столбец допускающим значение NULL:
public function up()
{
Schema::create('tablename', function (Blueprint $table) {
$table->increments('attachable_id')->nullable();
});
}
->nullable()
Укажите, что столбец допускает значения NULL ( ссылка)