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
答案 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 () { .. }