laravel-backpack - 如何将 Spatie 媒体库与 Backpack 一起用于 Laravel 上传字段?
问题描述
我想在 Backpack for Laravel 中上传一个文件,并立即使用 Spatie 媒体库将该文件附加到模型中。
我最好的选择是什么?
我尝试按照文档中的建议使用 SetImageAttribute 突变器执行此操作:https ://backpackforlaravel.com/docs/4.1/crud-fields#upload-1
public function setImageAttribute($value) {
$this->addMedia('image');
}
然而,这种方法要求我在数据库中有一个未使用的“图像”字段(因为 Spatie 媒体库使用自己的表)。
是否有另一种方法可以在不使用 mutator/创建额外的 DB 字段的情况下做到这一点?
解决方案
您可以通过覆盖模型上的set和get mutators/accessor来避免在数据库上创建未使用的图像字段。
在您的模型上创建以下 2 个方法:
public function getImageAttribute()
{
return $this->getFirstMediaUrl('image') ?? '';
}
public function setImageAttribute($file)
{
$this->clearMediaCollection('image'); // to remove any previous files
if ($file) {
$this->addMedia($file)->usingFileName($file->hashName())->toMediaCollection('image');
}
}
如果您的模型上有一个可填充集,也可以向其中添加图像。
protected $fillable = ['image']
现在您应该可以使用 Backpack 创建和更新文件了。您可以根据自己的需要和要求更改实施。
推荐阅读
- javascript - Vuejs动态改变填充?
- python - 如何使用新的未经训练的数据集来预测输出值?
- r - 当向量的长度很大时,R 不接受插入向量
- plsql - Proc sql 到底层 SQL 代码的转换
- git - Git rebase 强制合并
- xamarin - Xamarin,如何在 xaml 的列表视图中添加更多列,或者我应该为第 1 行的第 1、2、3、4、5 列使用网格,但我不知道如何访问它
- vba - 将文件保存到特定文件夹
- excel - 内置表单:ShowDataForm 属性
- java - 为什么我的 for 循环没有在 netbeans GUI 上给我一个输出?
- r - Leaflet for R 中的方形标记