Вызов неопределенной метода осветить\базы данных\красноречивый\Строитель::преобразование()

Вызов неопределенной метода осветить\базы данных\красноречивый\Строитель::преобразование()

26.01.2020 08:05:30 Просмотров 31 Источник

Я пытаюсь сделать запрос в Laravel, который должен выбрать значения, основанные на дате, pick_score и order BY hour, а также на некоторых конкретных строковых значениях, которые у меня есть в моем наборе данных. Запрос приведен ниже, но я получаю "вызов неопределенного метода 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');

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

У вопроса есть решение - Посмотреть?

Ответы - Вызов неопределенной метода осветить\базы данных\красноречивый\Строитель::преобразование() / Call to undefined method Illuminate\Database\Eloquent\Builder::transform()

Claymore

26.01.2020 08:16:40

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

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

https://stackoverflow.com/questions/59920677/call-to-undefined-method-illuminate-database-eloquent-buildertransform/59920784#comment105965001_59920784
Я попробовал ваши предложения, я добавил "get", а также превратил "Transform" в "map", и теперь я получаю эту ошибку:"слишком мало аргументов для функции Illuminate\Support\Collection::get ()". Я пытался добавить $match или $matches, но это не работает :( . Что же мне делать ?
https://stackoverflow.com/questions/59920677/call-to-undefined-method-illuminate-database-eloquent-buildertransform/59920784#comment105965088_59920784
Это очень смущает. Вызов transform () в результате orderBy () действует так, как будто этот результат был объектом Builder. Но вызов get () на нем действует так, как будто это была коллекция... Если кто-то другой не опередит меня позже, я взгляну на это, когда вернусь к компьютеру.
https://stackoverflow.com/questions/59920677/call-to-undefined-method-illuminate-database-eloquent-buildertransform/59920784#comment105965107_59920784
большое спасибо, я не могу найти никакого решения. :(
https://stackoverflow.com/questions/59920677/call-to-undefined-method-illuminate-database-eloquent-buildertransform/59920784#comment105965113_59920784
На данный момент, может быть, просто отправить выходные данные каждого вызова метода в отдельную переменную и сделать get_class() на каждом из них для проверки на вменяемость того, с чем вы там работаете.
eray

26.01.2020 09:28:09

 $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, который извлекает данные в виде коллекции из БД. Методы сбора сходны с красноречивыми. Поэтому большую часть времени люди путают их. Преобразование-это метод коллекций. https://laravel.com/docs/6.x/collections#method-transform

Закрыть X