Laravel-admin "一对多"模型下的图片删除
在使用Laravel-admin做管理端时,使用removable()删除"一对多"模型下"多"模型下的图片,删除无效
开发环境
"require": {\
"php": "^7.1.3",\
"caouecs/laravel-lang": "~4.0",\
"encore/laravel-admin": "^1.6",\
"fideloper/proxy": "^4.0",\
"laravel/framework": "5.8.*",\
"laravel/tinker": "^1.0",\
"overtrue/laravel-filesystem-qiniu": "^1.0",\
"qiniu/php-sdk": "^7.2"\
},
Model
数据库
parent表
DROP TABLE IF EXISTS `parent`;
CREATE TABLE `parent` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
child表
DROP TABLE IF EXISTS `child`;
CREATE TABLE `child` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`parent_id` int(11) unsigned NOT NULL,
`file` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
数据模型
Parent模型
class Parent extends Model
{
protected $table = 'parent';
protected $primaryKey = 'id';
public $incrementing = true;
public function child()
{
return $this->hasMany(Child::class);
}
}
Child模型
class Child extends Model
{
protected $table = 'child';
protected $primaryKey = 'id';
public $incrementing = true;
public function parent()
{
return $this->belongsTo(Child::class);
}
}
Controller
protected function form()
{
$form = new Form(new Parent);
$form->number('id', 'ID');
$form->text('name', '名称');
$form->hasMany('process_materials', '文件', function (Form\NestedForm $form) {\
$form->file('file', '附件')
->uniqueName()
->removable();
});
}
异常再现
浏览器->chrome
目前数据库中child表中有一条记录
页面截图
点击图片上的删除按钮,页面预览图消失
点击保存按钮,正常逻辑下,child表中的id=1的那条记录中file字段应当为空,但是实际上该字段仍然是之前的数据。
最后
在单表操作时,removable()可以在删除前端预览的同时,删除数据库中的数据,但是在一对多模型或者多对多模型下就无法实现。
大家是否也遇到过这样问题?
如果有解决的办法或者是我的使用方式不对,请大家告知。
在学习使用Laravel-admin框架的时候发现是真的好用,但是往往越是好用,越是傻瓜式的开发,会存在很多的坑。
推荐文章: