Как считать отношения при нумерации страниц? - PullRequest
0 голосов
/ 26 января 2020

У меня есть эти таблицы:

Schema::create('users', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('name');
    $table->string('email')->unique();
    $table->string('password');
});
Schema::create('periods', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->datetime('start_time');
    $table->datetime('end_time');
    $table->datetime('payout_time');
});
Schema::create('payouts', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->unsignedBigInteger('user_id');
    $table->unsignedBigInteger('period_id');
    $table->foreign('user_id')->references('id')->on('users');
    $table->foreign('period_id')->references('id')->on('periods');
});

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

Period::paginate();

Я пытался настроить отношение HasMany в таблице периодов, но Я уверен, что делаю это неправильно. Как я могу решить это?

Ответы [ 2 ]

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

Использование принадлежит toMany вместо hasMany

В модели пользователя:

    public function periods()
    {
        return $this->belongsToMany('App\Period', 'payouts', 'user_id', 'period_id');
    }

В модели периода:

    public function users()
    {
        return $this->belongsToMany('App\User', 'payouts', 'period_id', 'user_id');
    }

И получить счет как это:

Period::whereHas('users')->withCount('users')->paginate();
0 голосов
/ 26 января 2020

Я думаю, что вы ищете следующие отношения: User hasMany Payouts и Period hasMany Users. Это приводит к следующему запросу:

Period::whereHas(['users' => function ($q) {
    $q->whereHas('payouts');
}])->withCount('users')->paginate();

И наоборот, если вы sh будете знать обо всех выплатах для пользователей за указанный период:

Payout::whereHas(['period' => function ($q) use ($start_time, $end_time, $payout_time) {
    $q->where(compact('start_time', 'end_time', 'payout_time'));
}])->withCount('users')->paginate();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...