调用未定义的方法create()错误

问题描述 投票:1回答:2

我想在媒体模型中使用save_image()函数来保存我的图像。

这是我的媒体模型;

class Media extends Model
{
public function save_image($file)
    {
        $realname = str_slug(pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME));
        $extension = $file->getClientOriginalExtension();
        $new_name = str_slug($realname) . "-" . time() . "." . $extension;
        $file->move(public_path('uploads'), $new_name);

        $image = DB::create([
            'image' => $new_name,
            'image_path' => "uploads/" . $new_name,
            'image_alt_name' => $realname
        ]);
        return $image;
    }
}

在我的控制器;

public function storeMedia(Request $request)

{
    $this->validate($request,[
        'image'=> 'required|mimes:jps,png,gif,jpeg'
    ]);

    $image=$request->file('image');
    $media = new Media();
    $media->save_image($image);

    return response()->json([
        'url'=> env('APP_URL')."/".$image->image_path,
        'alt' => $image->image_alt_name,
        'id' => $image->id,
    ]);
}

我们不得不在第一次说DB::table('media')吗?我的意思是,我们已经在媒体模型,是必要的吗?

laravel laravel-5 orm
2个回答
0
投票

您没有在代码中指定表名。

这是解决方案

$image = DB::table('media')->create([
        'image' => $new_name,
        'image_path' => "uploads/" . $new_name,
        'image_alt_name' => $realname
    ]);

要么

$image = Media::create([
        'image' => $new_name,
        'image_path' => "uploads/" . $new_name,
        'image_alt_name' => $realname
    ]);

你也可以使用$this->create

希望这可以帮助


0
投票

查询构建器没有create()方法,因此您需要使用Eloquent:

Model::create([
    'image' => $new_name,
    'image_path' => "uploads/" . $new_name,
    'image_alt_name' => $realname
]);

如果要使用查询构建器,可以使用insert()方法:

DB::table('table_name')->insert([
    'image' => $new_name,
    'image_path' => "uploads/" . $new_name,
    'image_alt_name' => $realname
]);
© www.soinside.com 2019 - 2024. All rights reserved.