Laravel Eloquent: Подсчитайте данные из двух таблиц - PullRequest
0 голосов
/ 25 мая 2020

У меня есть две разные таблицы с именами artists и artworks. Я хочу получить данные из обеих таблиц и показать их в таблице Summary.

Условие здесь : получить name (в этой таблице есть другие столбцы) из таблицы artists и получить number of total artworks из таблицы artworks. Покажите их в таблице Summary.

artists
|-------------------|
|  id   |   name    |
|-------------------|
|  1    |    A      |
|-------------------|
|  2    |    B      |
|-------------------|
|  3    |    C      |
|-------------------|

artworks
|-----------------------------------------------------|
|  id   |   artist_id   |   title   |     medium      |
|-----------------------------------------------------|
|  1    |       1       |    ABC    |      Oil        |
|-----------------------------------------------------|
|  2    |       1       |    DEF    |     Water       |
|-----------------------------------------------------|
|  3    |       1       |    GHI    |     Water       |
|-----------------------------------------------------|
|  1    |       2       |    JKL    |      Oil        |
|-----------------------------------------------------|
|  2    |       2       |    MNO    |     Water       |
|-----------------------------------------------------|
|  3    |       3       |    PQR    |      Oil        |
|-----------------------------------------------------|

Это то, что я хочу:

Summary
|-------------------------------------------|
|  No   |   Artist Name  |   Total Artwork  |
|-------------------------------------------|
|  1    |        A       |         3        |
|-------------------------------------------|
|  2    |        B       |         2        |
|-------------------------------------------|
|  3    |        C       |         1        |
|-------------------------------------------|

Любая помощь будет принята с благодарностью. Спасибо за ваше время.

Ответы [ 2 ]

3 голосов
/ 25 мая 2020

Вы можете использовать метод withCount () для своих отношений:

$artists = Artist::withCount('artworks')->get();
foreach($artists as $artist) {
    echo $artist->artworks_count;
}
2 голосов
/ 25 мая 2020

, поскольку вы хотите использовать запрос к БД, вам нужно добавить соединение.

\DB::table('artists')
->join('artworks', 'artists.id', '=', 'artworks.artist_id')
->select('artists.id as id', 'artists.name as name', \DB::raw("count(artworks.artist_id) as count"))
->groupBy('artists.id')
->get();

И если вы хотите использовать отношение, используйте отношение hasMany в модели Artist .

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Artist extends Model
{
    protected $table = 'artists';

    public function artworks()
    {
        return $this->hasMany('App\Artwork','artist_id','id');
    }
}

В контроллере

$artists = Artist::withCount('artworks')->get();
foreach($artists as $artist) {
    echo $artist->artworks_count;
}
...