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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调用未定义的方法create()错误相关的知识,希望对你有一定的参考价值。

我想在媒体模型中使用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')吗?我的意思是,我们已经在媒体模型,是必要的吗?

答案

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

这是解决方案

$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

希望这可以帮助

另一答案

查询构建器没有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
]);

以上是关于调用未定义的方法create()错误的主要内容,如果未能解决你的问题,请参考以下文章

未调用自定义适配器 getView() 方法

Laravel Migration致命错误:调用未定义的方法Illuminate Database Schema Blueprint :: integer()

调用未定义的方法 Maatwebsite\Excel\Facades\Excel::create() - Laravel 5.3

“未捕获的类型错误:在 angularJS/NodeJS 中使用条带支付方法 Stripe.charges.create() 时无法读取未定义的属性‘创建’”

找不到 mcrypt => 调用未定义的函数 Laravel\mcrypt_create_iv()

调用类方法时出现“调用未定义函数”错误