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.
У меня ошибка:
Type error: Argument 1 passed to App\Transformers\DigitalCaseTransformer::transform() must be an instance of App\DigitalCase, instance of stdClass given, called in
Если он работает в состоянии ЕСЛИ, все в порядке. Но когда он работает в состоянии ELSE, он возвращает ошибку. Как я могу преобразовать переменную digital_cases в экземпляр DigitalCase?
Laravel 5.6
@TimLewis, как мне это сделать? Если я попробую DigitalCase :: all (), он вернется пустым.






Использование $digital_cases = DB::table('digital_cases'); не даст вам экземпляра (или коллекции) модели DigitalCase. Вам нужно использовать DigitalCase. Чтобы начать запрос, к которому вы можете добавлять условные предложения, начните с
$digital_cases = DigitalCase::query();
Затем продолжите добавление предложений таким же образом. Когда вы пройдете закрытие (->get() и т. д.), Вы получите коллекцию моделей DigitalCase (или один DigitalCase при использовании ->first()).
Вы действительно можете упростить и очистить условные запросы с помощью 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 () { .. }.
Почему вы используете
$digital_cases = DB::table('digital_cases');? Вы просто пытаетесь запустить запрос, чтобы добавить к нему условия?