Использование отношения Eloquent hasMany с whereIn - PullRequest
0 голосов
/ 02 июля 2019

У меня есть модель пользователя с массивом идентификаторов.Идентификатор может быть либо IP-адресом, либо чем-то еще.Пользователи могут быть забанены, и это делается через их идентификаторы.Однако я не могу выполнить такую ​​логику, используя отношение Eloquent HasMany.

Я хочу этого, поскольку существует модель (запись) Ban, в которой идентификатор совпадает с одним из идентификаторов в массиве идентификаторов пользователя, а затемэто должно быть добавлено к тому, что имеет много отношений.

Я пытался использовать «HasMany» с «whereIn», но это не сработало, так как все равно будет искать взаимосвязь внешнего ключа, а затем применить ограничения «whereIn».Это не то, что я хочу.

Вот как я пытаюсь определить отношения пользователя с запретами.

public function bans()
{
    // Due to how banning works, there might exist a ban record for
    // each of the player's identifier (steam, IP address
    // rockstar license, etc.), and it's essential to get all.

    // All ban records where the identifier column equals one of 
    // the user's identifiers (array)
    return $this->hasMany(Ban::class)->whereIn('identifier', $this->identifiers);
}

Ожидается, что он должен вернуть все записи банов, в которых есть одна изидентификаторы пользователя в столбце идентификаторов.Но это не работает, поскольку HasMany по-прежнему применяет проверку на равенство внешних ключей.

Заранее спасибо!

1 Ответ

0 голосов
/ 02 июля 2019

Я считаю, что подходящим решением было бы использовать whereHas. С его помощью вы можете выполнять более сложные и мощные запросы.

https://laravel.com/docs/5.8/eloquent-relationships

use Illuminate\Database\Eloquent\Builder;

// Retrieve posts with at least one comment containing words like foo%...
$posts = App\Post::whereHas('comments', function ($query) {
    $query->where('content', 'like', 'foo%');
})->get();

// Retrieve posts with at least ten comments containing words like foo%...
$posts = App\Post::whereHas('comments', function ($query) {
    $query->where('content', 'like', 'foo%');
}, '>=', 10)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...