Laravel Eloquent Как выбрать, используя условие «где» для сводной таблицы - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть три таблицы базы данных, которые называются user (id, name), group (id, name) и user_group (user_id, group_id, valid_before) с отношением многие ко многим.

class User extends Model
{
    protected $table = 'user';

    public function groups()
    {
        return $this->belongsToMany(Group::class, 'user_group')
               ->withPivot('valid_before');
    } 
}

class Group extends Model
{
    protected $table = 'group';

    public $timestamps = false;

public function user()
{
    return $this->belongsToMany(User::class, 'user_group');
}
}

Как выбратьвсе пользователи (использующие Eloquent), имеющие

valid_before < $some_date

?

1 Ответ

1 голос
/ 24 сентября 2019

Есть много способов достичь этой цели.Я покажу вам пример использования областей запросов .

. В вашем классе User вам нужно сделать небольшое обновление:

class User extends Model
{
    protected $table = 'user';

    public function groups()
    {
        return $this->belongsToMany(Group::class, 'user_group')
               //->withPivot('valid_before'); <-- Remove this
    }
}

и создать область видимости.в вашей Group модели:

class Group extends Model
{
    protected $table = 'group';

    public $timestamps = false;

    public function user()
    {
        return $this->belongsToMany(User::class, 'user_group');
    }    

    /**
     * This scope gets as input the date you want to query and returns the users collection
     *
     * @param  \Illuminate\Database\Eloquent\Builder $query
     * @param  string $date
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeUsersValidBefore($query, $date)
    {
        return $query->users()->wherePivot('valid_before', '<', $date);
    }
}

Теперь я представляю, что у вас есть GroupController, который где-то создает запрос для получения , действительного до пользователей.Что-то вроде:


// [...]

$users = Group::usersValidBefore($yourDate)->get();

// [...]

Если вы хотите создать запрос с другой стороны, я имею в виду, что вы хотите использовать модель User и перечислить всех пользователей, имеющих отношение с опорным числом с заполнением valid_before, чемправильный подход - создание промежуточной модели UserGroup , которую можно легко использовать для создания запроса.

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