Как составить условия в запросе laravel, основываясь на возвращенном значении вспомогательной функции - PullRequest
0 голосов
/ 04 ноября 2019

Я использую Laravel 5.7. У меня есть модель «Match», имя первого участника которой возвращается из вспомогательной функции getFirstParticipant (Match $ match). Я пытаюсь получить определенные совпадения от DB, чьи первые участники, например, «Джон». Возможно ли, чтобы я использовал функции запросов Eloquent, например, для чего-то вроде этого?

Match::where('firstParticipant', 'John')

или каких-либо других решений?

Я копирую свою вспомогательную функцию ниже, если она может помочьобъявить проблему:

function getFirstParticipant(Match $match)
    {
        $structure_id = $match->structure_id;
        $seed = $match->matchResult->first_seed;

        $placement = Placement::where('structure_id', $structure_id)->where('seed', $seed)->first();

        return !empty($placement->player_id) ? $placement->player->username : $placement->team->name;
    }

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Нет, нет пути. Если не принимать во внимание вопросы проектирования баз данных, единственный способ увидеть эту работу - использовать collection методы.

Match::get()->filter(function ($match) {
    return $match->firstParticipant == 'John'; // Or is it getFirstParticipant($match) ?
})->all();
# Laravel 6.x introduces LazyCollections
Match::cursor()->filter(function ($match) {
    return $match->firstParticipant == 'John'; // Or is it getFirstParticipant($match) ?
})->all();
0 голосов
/ 04 ноября 2019

Просто подставьте переменную во второй параметр.

$first = getFirstParticipant(Match $match);

Match::where('firstParticipant', $first->first_name)->get();

Очевидно, я предполагаю некоторые имена переменных здесь, такие как first_name. Но вы должны быть в состоянии следовать этому. Просто используйте ваш помощник для возврата значения модели и вставьте это возвращаемое значение в качестве второго параметра аргумента where.

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