【问题标题】:Laravel pass model class as paramter in functionLaravel 将模型类作为函数中的参数传递
【发布时间】:2018-09-24 19:32:18
【问题描述】:

我编写了一个控制器,它可以从数据库中删除一条记录,这非常简单。代码如下所示。

public function destroy(Request $request)
    {
        try {
            MyModel::where('id', json_decode($request->get('data'),true)['id'])->delete();
            return response()->json([
                'status' => 'success',
                'message' => 'Deleted successfully'
            ]);
        } catch (\Exception $e) {
            return response()->json(['status' => 'error', 'message' => 'Something went wrong!!', 'exception_message' => $e]);
        }
    }

现在我想在一个共同的地方使用删除的逻辑,会有很多模型具有破坏功能。所以我写了这个

public function destroy(Request $request)
    {
        return Crud::destroy(MyModel::class, $request);
    }

Crud 类

<?php


namespace App\Helper;


use App\Http\Controllers\Controller;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;

class Crud extends Controller
{

    public static function destroy(Model $model,Request $request)
    {
        try {
            $output = $model::where('id', $request->get('id'))->delete();
            return response()->json([
                'status' => 'success',
                'message' => 'Deleted successfully',
                'output' => $output
            ]);
        } catch (\Exception $e) {
            return response()->json(['status' => 'error', 'message' => 'Something went wrong!!', 'exception_message' => $e]);
        }
    }

}

?>

但是当我调用destroy函数时,我得到了Type error: Argument 1 passed to App\Helper\Crud::destroy() must be an instance of Illuminate\Database\Eloquent\Model, string given,的错误

如何在函数中传递 Laravel 模型。

【问题讨论】:

  • 你需要传递一个模型的实例(例如Model::first()的结果,将返回一个实例)。 Model::class 将返回模型的完整命名空间路径(字符串)。
  • 我怎么能在上面的例子中做到这一点。我做不到。
  • 这由你来决定。从发布的代码中,无法判断您是如何使用该功能以及您想要的结果是什么
  • @DimitriMostrey 对不起,我只是函数内部的一些东西,因为破坏不起作用。它现在起作用了。谢谢!!!
  • 好。你现在可以继续了。快乐编码。我将在下面添加答案。我自己也遇到过这个问题。

标签: laravel laravel-5


【解决方案1】:

改变

public static function destroy(Model $model,Request $request)
{ ... }

public static function destroy($model,Request $request)
{ ... }

模型Model 不作为实例存在。使用字符串作为模型是可行的,只是不要暗示它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 2015-07-29
    • 2014-01-18
    • 2018-01-04
    • 1970-01-01
    • 2022-10-06
    • 2019-04-24
    相关资源
    最近更新 更多