Transform () должен быть экземпляром App \ DigitalCase

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

Почему вы используете $digital_cases = DB::table('digital_cases');? Вы просто пытаетесь запустить запрос, чтобы добавить к нему условия?

Tim Lewis 25.06.2018 20:49

@TimLewis, как мне это сделать? Если я попробую DigitalCase :: all (), он вернется пустым.

Nevermore 25.06.2018 20:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
2
915
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Использование $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 () { .. }.

Другие вопросы по теме