Вызов неопределенного метода Illuminate \ Database \ Eloquent \ Builder :: transform () - PullRequest
0 голосов
/ 26 января 2020

Я пытаюсь сделать запрос в Laravel, который должен выбирать значения на основе даты, pick_score и порядка по часам, а также по некоторым указанным c строковым значениям, которые есть в моем наборе данных. Запрос приведен ниже, но я получаю «Вызов неопределенного метода Illuminate \ Database \ Eloquent \ Builder :: transform ()», и я не уверен, что делаю неправильно.

    $matches = Match::select()
    ->where('date', $date)
    ->where('pick_score', '<>', '0')
    ->orderBy('hour')
    ->transform(function ($match) {
        if(
            $match->competition_type == "ATP - SINGLES" 
            or
            $match->competition_type == "WTA - SINGLES"
        ){
            $match->competition_type = -1;
        }else{
            $match->competition_type = 'competition_type';
        }
        return $match;
    })
    ->sortBy('competition_type');

Может кто-нибудь мне помочь с этой ошибкой?

Ответы [ 2 ]

1 голос
/ 26 января 2020
 $matches = Match::select()
    ->where('date', $date)
    ->where('pick_score', '<>', '0')
    ->orderBy('hour')
    ->get()
    ->transform(function ($match) {
        if(
            $match->competition_type == "ATP - SINGLES" 
            or
            $match->competition_type == "WTA - SINGLES"
        ){
            $match->competition_type = -1;
        }else{
            $match->competition_type = 'competition_type';
        }
        return $match;
    })
    ->sortBy('competition_type');

Это может решить вашу проблему.

Laravel имеет красноречивую библиотеку orm для запросов к базе данных. https://laravel.com/docs/6.0/eloquent. У него есть метод get, который извлекает данные как коллекцию из базы данных. Методы сбора аналогичны с eloquent. Поэтому большую часть времени люди путают их. Transform - это метод коллекций. https://laravel.com/docs/6.x/collections#method -преобразования

1 голос
/ 26 января 2020

Имена общих методов могут немного сбить с толку, но суть в том, что запуск orderBy() на объекте Builder просто возвращает тот же объект Builder, , а не Collection. Чтобы получить ожидаемую коллекцию, скажите Builder сначала выполнить запрос, поместив вызов get() между orderBy() и transform().

Кстати, Collection::transform() не возвращает что-нибудь. Я думаю, что вы хотите вместо этого map().

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