transform () должен быть экземпляром App \ DigitalCase - PullRequest
0 голосов
/ 25 июня 2018
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.

Я получил ошибку:

Ошибка типа: Аргумент 1, передаваемый в App \ Transformers \ DigitalCaseTransformer :: transform (), должен быть экземпляром App \ DigitalCase, заданным экземпляром stdClass, вызывается в

Если все работает в состоянии IF, все в порядке.Но когда он работает в состоянии ELSE, он возвращает ошибку.Как я могу преобразовать переменную digital_cases в экземпляр DigitalCase?

Laravel 5.6

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Вы можете действительно упростить и очистить условные запросы, используя 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 () { .. }

0 голосов
/ 25 июня 2018

Использование $digital_cases = DB::table('digital_cases'); не даст вам экземпляр (или коллекцию) модели DigitalCase.Вам нужно использовать DigitalCase.Чтобы начать запрос, к которому можно добавить условные предложения, начните с

$digital_cases = DigitalCase::query();

Затем продолжите добавлять предложения таким же образом.Когда вы проходите замыкание (->get() и т. Д.), Вы получаете коллекцию из DigitalCase моделей (или одну DigitalCase при использовании ->first()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...