【问题标题】:laravel uploaded image not adding to the databaselaravel 上传的图片没有添加到数据库中
【发布时间】:2015-01-15 01:42:10
【问题描述】:

我正在尝试在 laravel 上上传图片,但有时无法在数据库中设置图片目的地。

当我尝试测试并回显最终图像和链接目标时,一切正常,当我检查图像目标并且在我的目标文件夹中图像存在但只有图像不会在数据库中设置。

我已经在数据库中设置了这个字段

Name          Type           Collation         Attributes   Null    Default
avatarfull    varchar(500)   utf8_unicode_ci                 No       None

为了以防万一,我将 varchar 增加到 500。

在我的用户控制器上,我有这个用于存储新用户

    public function store() {
    $validator = Validator::make(Input::all(), [
        'photo'             => 'mimes:jpeg,bmp,png|max:1000'
    ]);

    if($validator->fails()) {
        return Redirect::route('admin.users.create')->withErrors($validator)->withInput();
    } else {
        if(Input::hasFile('photo')) {
            if(Input::file('photo')->isValid()) {
                $imagename = str_random(20) . '.' . Input::file('photo')->getClientOriginalExtension();
                $imagelocation = Input::file('photo')->move(base_path() . '/img', $imagename );
                $avatarfull = 'img/' . $imagename;
            } else {
                $avatarfull     = 'img/profile_default.png';
            }
        } else {
            $avatarfull     = 'img/profile_default.png';
        }

        $create = User::create([
            'avatarfull'    => $avatarfull,
        ]);

        if($create) {
            return Redirect::route('admin.users.index')
                ->with('success_message', 'New user is successfully created!');
        }
    }

}

因此,验证器会检查它需要检查的内容,图像是否为 MIME 类型,并检查图像大小是否不超过 1mb,这样就可以了。

进一步输入检查是否设置了hasfile以进行上传,如果设置了文件以进行上传,则检查文件是否有效,然后获取图像,将其重命名为随机字符串,复制到正确的位置并将$avatarfull变量设置为正确在数据库中设置它的路径。

如果我

echo $avatarfull
or
print_r($avatarfull)
or
var_dump(Input::all())

我得到了所有正确的数据

var_dump 显示输入字段的所有数据,并且有 laravel 常用的后端功能,例如检查文件类型、文件大小、将其存储在临时路径中、将路径移动到新位置。一切正常。

如果我在最后检查 $avatarfull 变量,就在我存储新用户之前,$avatarfull 变量是应该的,如果图像被上传而不是回显

img/random10characterstring.jpg

检查基本路径图像是否已正确存储并移动到我电脑上的所需位置

/opt/lampp/htdocs/laravel/img/random10characterstring.jpg

与link_to结合使用显示url链接图片的最终结果

localhost/laravel/img/random10characterstring.jpg

当然,在我的文件浏览器中检查图像确实存在于该路径中。所以 laravel 完成了上传图片、重命名并移动到所需位置的工作。

只有它不会在数据库中设置字段。当我添加新用户(这是用户头像的图像字段)时,它会在数据库中添加新用户,并且我会设置数据库中的所有字段,除非我没有设置数据库中图像的路径。由于某种原因,此字段留空。

【问题讨论】:

    标签: php mysql image file-upload laravel-4


    【解决方案1】:

    请检查 avatarfull 是否在您的用户模型中的 $fillable 数组中。如果不是,用户模型批量分配保护将不允许通过Users::create(...) 存储数据。 如果您不想将 avatarfull 放入可填充数组中,您可以随时使用:

    $user = new User;
    $user->avatarfull = $avatarfull;
    $user->save();
    

    有关批量分配的更多信息,请参阅:http://laravel.com/docs/4.2/eloquent#mass-assignment

    【讨论】:

    • 是的,我昨晚解决了这个问题,我忘了让它可填充,因此它不允许我将它存储在数据库中。我会将其标记为正确答案。
    猜你喜欢
    • 2020-12-07
    • 2015-04-10
    • 2020-03-26
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多