无法弄清楚为什么CRUD会尝试将图片二进制文件存储到数据库中,而不是上传文件的名称。
模型
public function setImageAttribute($value)
{
$attribute_name = "image_wheel";
$disk = "wheel";
$destination_path = "wheel_png";
// if the image was erased
if ($value==null) {
// delete the image from disk
\Storage::disk($disk_wheel)->delete($this->{$image_wheel});
\Storage::disk($disk_vehicle)->delete($this->{$image_vehicle});
// set null in the database column
$this->attributes[$image_wheel] = null;
$this->attributes[$image_vehicle] = null;
}
// if a base64 was sent, store it in the db
if (starts_with($value, 'data:image'))
{
// 0. Make the image
$image = \Image::make($value);
// 1. Generate a filename.
$filename = md5($value.time()).'.jpg';
// 2. Store the image on disk.
\Storage::disk($disk)->put($destination_path.'/'.$filename, $image->stream());
// 3. Save the path to the database
$this->attributes[$attribute_name] = $destination_path.'/'.$filename;
}
}
错误消息
Next Illuminate \ Database \ QueryException:SQLSTATE [22001]: 字符串数据,右截断:1406数据太长,列' image_wheel'在第1行 (SQL:插入
wheels
(name
,part_no
,alias
,series_id
,sizes
,image_wheel
,{{1 }},image_vehicle
,description
,order
,status
,featured
,-wheel_image_id
,-wheel_tags
,updated_at
)值(,,,,,数据:image / jpeg; base64,/ 9j / 4AAQSkZJRgABAQAAAQABAAD / 2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD / ...........
答案 0 :(得分:1)
问题在于功能名称。函数名称应具有字段名称。就像在你的例子中一样
$attribute_name = "image_wheel";
因此函数名称应为
public function setImage_wheelAttribute($value)
这将解决问题
答案 1 :(得分:0)
务必将image_wheel
更改为text
。您可能正在达到该字段当前数据类型的最大长度。
答案 2 :(得分:0)
Uahmed的回答使我找到了正确的答案
根据Laravel的文档,在定义变幅器时
要定义一个变体,请在模型上定义一个setFooAttribute方法,其中Foo是您要访问的列的“按studly”大小写的名称。
因此,在我的情况下,函数名称应为
public function setImageWheelAttribute($value)