我正在尝试使用$media->onDuplicateReplace();
在代码中:
public function update($id){
$user = User::find($id);
$user->name=request('name');
$user->email=request('email');
$user->password=request('password');
$user->description=request('description');
$user->country_id=request('country');
$user->state_id=request('state');
$user->city_id=request('city');
$user->works_at=request('works_at');
$user->studies_at=request('studies_at');
$uid = $id;
$img = Image::make(request('file'));
$img->resize(800, null, function ($constraint) {
$constraint->aspectRatio();
});
$img->crop(800,800);
$img->save('uploads/users/images/'.$uid.'.jpg');
$media = MediaUploader::import('uploads', 'users/images', $uid, 'jpg');
$media->onDuplicateReplace();
$user->attachMedia($media, 'image');
$user->update();
return redirect('/');
}
但我不会为我工作,继续发送错误:
SQLSTATE [23000]:完整性约束违规:1062重复条目 '上载用户/图像-1- JPG'为了钥匙 ' media_disk_directory_filename_extension_unique' (SQL:插入到 媒体(磁盘,目录,文件名,扩展名,mime_type, aggregate_type,size,updated_at,created_at)values(uploads, 用户/图像,1,jpg,image / jpeg,image,49344,2017-12-24 10:10:07, 2017-12-24 10:10:07))
这件事也不行:
'on_duplicate' => Plank\Mediable\MediaUploader::ON_DUPLICATE_REPLACE,
如果文件已存在,我怎样才能让媒体替换文件?
答案 0 :(得分:0)
当我回到MySQL 5.5。*时,发现了这样的问题。 syncMedia
或attachMedia
没关系,因为media
表在连接到Mediable之前就被弄乱了。
MySQL 5.6可能消除了许多其他良好的更改,因此我建议对其进行更新。因此,请使用syncMedia
附加媒体。
如果原因似乎不同,或者您无法以我的身份更新服务器上的MySQL,则存在“肮脏”的解决方法。删除当前媒体并创建新媒体,因此不会出现冲突:
if ($user->hasMedia('image')) $user->firstMedia('image')->delete();
$media = MediaUploader::import('uploads', 'users/images', $uid, 'jpg');
$media->onDuplicateReplace();
$user->attachMedia($media->upload(), 'image');
答案 1 :(得分:0)
也许您对.env文件中指定的数据库使用了不同的数据库连接?
对我来说就是这种情况,Medicable总是在错误的数据库中进行检查。 要解决此问题,我必须实现自己的媒体模型,扩展默认模型,以便能够像在其他模型中一样在模型本身中定义连接。
因为在我的情况下,连接将在运行时指定(带有连接详细信息输入的laravel控制台工具)。
use Plank\Mediable\Media as PlankMedia;
class Media extends PlankMedia
{
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
if(!empty(config('database.connections.destination'))){
$this->setConnection('destination');
}
}
}
,在mediable.php配置文件中,我指定了我的自定义模型:
'model' => App\Models\Media::class,