transform()必须是App \ DigitalCase的实例

时间:2018-06-25 18:03:45

标签: php laravel

public function index(Request $request) {
    if ($request->has('show_type') && $request->show_type == 'deleted') {
        $digital_cases = DigitalCase::onlyTrashed()->get();
    } else {
        $digital_cases = DB::table('digital_cases');
        if ($request->has('caseName')) {
            $digital_cases = $digital_cases->where('name', 'LIKE', $request->caseName . '%');
            if ($request->has('addedBy')) {
                $addedBy = $request->addedBy;
                $digital_cases = $digital_cases->whereIn('added_by', function ($query) use ($addedBy) {
                    $query->select('id')->from('assistants')->where('firstname', 'LIKE', $addedBy . '%');
                });
            }
        } else if ($request->has('addedBy')) {
            $addedBy = $request->addedBy;
            $digital_cases = $digital_cases->whereIn('added_by', function ($query) use ($addedBy) {
                $query->select('id')->from('assistants')->where('firstname', 'LIKE', $addedBy . '%');
            });
        }

        $digital_cases = $digital_cases->get();
    }

    $transformation = fractal()->transformWith(new DigitalCaseTransformer())->collection($digital_cases)->toArray();
    return response()->json($transformation, 200);
}

我真的很讨厌问问题。但是我最后的问题是;我无法将digital_cases转换为DigitalCase Model实例。

我遇到了错误:

  

类型错误:传递给App \ Transformers \ DigitalCaseTransformer :: transform()的参数1必须是App \ DigitalCase的实例,是给定的stdClass实例,在

中调用

如果它在IF条件下工作,则一切正常。但是,当它在ELSE条件下工作时,它将返回错误。如何将digital_cases变量转换为DigitalCase的实例?

Laravel 5.6

2 个答案:

答案 0 :(得分:1)

使用$digital_cases = DB::table('digital_cases');不会为您提供DigitalCase模型的实例(或集合)。您需要使用DigitalCase。要开始可以附加条件子句的查询,请以

开头
$digital_cases = DigitalCase::query();

然后,以相同的方式继续附加子句。当您传递闭包(->get()等)时,最终将得到DigitalCase个模型的集合(如果使用DigitalCase,则可能是单个->first())。

答案 1 :(得分:1)

您实际上可以使用when简化和清理条件查询:

DigitalCase::when($request->has('caseName'), function ($q) {
    return $q->where('name', 'LIKE', request()->caseName . '%');
})->when($request->has('addedBy'), function ($q) {
    return $q->whereIn('added_by', function ($query) {
        $query->select('id')->from('assistants')->where('firstname', 'LIKE', request()->addedBy . '%');
    });
}})->get();

与所有if () { .. } else if () { .. }

的结果相同
相关问题