Laravel Backpack图像字段错误:1406列

时间:2017-12-02 00:24:42

标签: php laravel crud backpack-for-laravel

无法弄清楚为什么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:插入wheelsnamepart_noaliasseries_idsizesimage_wheel,{{1 }},image_vehicledescriptionorderstatusfeatured-wheel_image_id-wheel_tagsupdated_at )值(,,,,,数据:image / jpeg; base64,/ 9j / 4AAQSkZJRgABAQAAAQABAAD / 2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD /   ...........

3 个答案:

答案 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)