Как выполнить этот запрос в Eloquent, чтобы показать результаты в виде таблицы? - PullRequest
0 голосов
/ 26 июня 2018

Я хочу показать некоторую информацию о последних регистрациях в конференции в виде таблицы ниже. Эти таблицы показывают, например, что последняя регистрация была сделана Джоном и является регистрацией с 2 ​​участниками, и общая стоимость регистрации была 10,00.

User that did the registration | Quantity of participants registered | Total Value
            John                               2                        10.00$
            Jake                               1                        5.00$           

У меня есть этот запрос, который показывает вышеуказанный результат:

SELECT users.name,COUNT(participants.registration_id),SUM(registration_types.price) 
FROM participants
INNER JOIN registration_types 
        on participants.registration_type_id =
          registration_types.id
INNER JOIN registrations
        on registrations.registration_id =
           participants.registration_id
INNER JOIN users
        on users.id = registrations.user_that_did_registration
group by users.name

Но я хочу использовать Eloquent для выполнения запроса, чтобы можно было отобразить результаты в виде таблицы в таблице:

<table class="table table-striped table-responsive-sm box-shaddow">
    <thead>
    <tr>
        <th scope="col">User that did registration</th>
        <th scope="col">Quantity</th>
        <th scope="col">Date</th>
        <th scope="col">Price</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        ...
    </tr>
    </tbody>
</table>

С Eloquent у меня вроде как ниже, но он не работает. Знаете ли вы, каким должен быть запрос, чтобы можно было отобразить необходимые данные в таблице?

$registrationsInfo = Participant::
    leftJoin('registration_types', 'participants.registration_type_id', '=', 'registration_types.id')
->leftJoin('registrations', 'registration.id', '=', 'participants.registration_id')
->leftJoin('users', 'users.id', '=', 'registrations.user_that_did_registration')
->selectRaw('users.name, count(participants.registration_id), sum(registration_types.price)')
->groupBy('users.name')
->get();

Соответствующие модели для вопроса:

Модель пользователя:

public function registrations(){
    return $this->hasMany('App\Registration','user_that_did_registration');
}

Регистрационная модель:

// user that did the registration
public function customer(){
    return $this->belongsTo(User::class, 'user_that_did_registration', 'id');
}
 public function participants(){
    return $this->hasMany('App\Participant');
}

public function conference(){
    return $this->belongsTo('App\Conference');
}

Модель конференции:

 public function registrations(){
    return $this->hasMany('App\Registration', 'conference_id');
}

Режим участников:

public function registration(){
    return $this->belongsTo('App\Registration');
}

public function registration_type(){
    return $this->belongsTo('App\RegistrationType');
}

Тип регистрации модель:

class RegistrationType extends Model
{
    public function conference(){
        return $this->belongsTo('App\Conference');
    }


    public function participants(){
        return $this->hasMany('App\Participant');
    }

    public function registrations(){
        return $this->belongsToMany('App\Registration', 'registration_registration_types');
    }
}

1 Ответ

0 голосов
/ 26 июня 2018

Попробуйте это

$registrations = DB::table('registrations')
        ->join('participants', 'registrations.id', '=', 'participants.registration_id')
        ->join('users', 'users.id', '=', 'registrations. user_that_did_registration_id')
        ->join('registration_types', 'registration_types.id', '=', 'participants.registration_type_id')
        ->select( DB::raw('count(participants.registration_id) as participants_count, sum(registration_types.price) as totalPrice, users.name as userName'))
        ->groupBy('users.name')->get();

Loop это так

foreach($registrations as $registration){
    echo $registration->userName." - ".$registration->participants_count." - ". $registration->totalPrice;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...