Laravel получить несколько таблиц - PullRequest
1 голос
/ 22 февраля 2020

Я пытаюсь создать что-то вроде вариантов продукта, пока все хорошо. Но есть одна проблема. Я получаю продукт и переменные как отдельные json

Пример:

[
    {
        "id": 1,
        "panelgameid": 71,
        "name": "Counter-Strike 1.6",
        "active": 1,
        "minslots": 12,
        "maxslots": 32,
        "slotincreament": 2,
        "order": 1,
        "gameid": 1,
        "location": "Serbia",
        "price": 0.6
    },
    {
        "id": 2,
        "panelgameid": 71,
        "name": "Counter-Strike 1.6",
        "active": 1,
        "minslots": 12,
        "maxslots": 32,
        "slotincreament": 2,
        "order": 1,
        "gameid": 1,
        "location": "Germany",
        "price": 0.4
    }
]

И у меня есть мои игры и мои цены. Но я хочу показать их вот так.

[
    {
        "id": 1,
        "panelgameid": 71,
        "name": "Counter-Strike 1.6",
        "active": 1,
        "minslots": 12,
        "maxslots": 32,
        "slotincreament": 2,
        "order": 1,
        "gameid": 1,
        "prices": [
           {
           "location": "USA",
           "price": 0.6
           },
           "location": "Germany",
           "price": 0.4
        ]
    }
]

Это мой текущий код КОНТРОЛЛЕРА:

$games = DB::table('games')
        ->join('prices', 'games.id', '=', 'prices.gameid')
        ->get();

        return $games;

1 Ответ

3 голосов
/ 22 февраля 2020

Создайте модели Game и Price с помощью команды make:model artisan:

php artisan make:model Game
php artisan make:model Price

Вы найдете их в папке /app вашего проекта. Здесь определяются отношения.

Модель игры

<?php

namespace App;


use Illuminate\Database\Eloquent\Model;

class Game extends Model
{

    // define the relationship with the Price model, one game has many prices
    public function prices()
    {
        return $this->hasMany(Price::class, 'gameid'); // you will have to make explicit the foreign key. Looking at the query in your question, I assume that it's gameid
    }

}

Цена модели

<?php

namespace App;


use Illuminate\Database\Eloquent\Model;

class Price extends Model
{

    // define the relationship to the Game model, one price belongs to a Game
    public function game()
    {
        return $this->belongsTo(Game::class, 'gameid'); 
    }

}

Затем вы можете запросить игры с ценами в вашем контроллере :

$games = Game::with('prices')->get();

Подробнее о Eloquent ORM вы можете прочитать в документации: Eloquent: начало работы и Eloquent : Отношения один ко многим .

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