代码之家  ›  专栏  ›  技术社区  ›  Nevermore

transform()必须是app\digitalcase的实例

  •  1
  • Nevermore  · 技术社区  · 6 年前
    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);
    }
    

    我真的厌倦了提问。但最后一个问题是,我无法将数字案例转换为数字案例模型实例。

    我有一个错误:

    类型错误:传递给app\transformers\digitalcasestransformer::transform()的参数1必须是app\digitalcase的实例,给定stdclass的实例,在中调用

    如果它在条件允许的情况下工作,一切正常。但当它在其他条件下工作时,它会返回一个错误。如何将数字案例变量转换为数字案例实例?

    拉拉维尔5.6

    2 回复  |  直到 6 年前
        1
  •  1
  •   Tim Lewis    6 年前

    使用 $digital_cases = DB::table('digital_cases'); 不会为您提供 DigitalCase 模型。你需要使用 数字外壳 .若要启动可向其追加条件子句的查询,请以开头

    $digital_cases = DigitalCase::query();
    

    然后,以同样的方式继续附加子句。当你通过一个关闭( ->get() 等等),你最终会得到 数字外壳 模型(或单个 数字外壳 如果使用 ->first() )。

        2
  •  1
  •   Brian Lee    6 年前

    您可以使用 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 () { .. }