Возврат связанных красноречивых моделей в целом в формате json - PullRequest
2 голосов
/ 01 апреля 2020

Я изучаю Eloquent Model Relationships в Laravel. В моем демонстрационном проекте у меня есть две таблицы Sets и Cards, они имеют отношение One to many. Один Set имеет множество Cards, а Card принадлежит Set.

Я хочу, чтобы выходные данные содержали вместе Sets и Cards во вложенном массиве JSON, Cards в Sets. Я установил отношения в обеих моделях.

Мой ожидаемый результат


[
  {
    "set_id":1,
    "name":"English",
    "description":"English Language",
    "created_at":"2020-03-31T15:41:55.000000Z",
    "updated_at":"2020-03-31T15:41:55.000000Z"},
    "cards: 
       {
          "card_id":1,
          "name":"Greetings",
          "description":"Greetings related questions",
          "set_id":1,
          "created_at":"2020-03-31T15:45:03.000000Z",
          "updated_at":"2020-03-31T15:45:03.000000Z"
       }
  }
]

Set. php

<?php

namespace App;
use App\Card;

use Illuminate\Database\Eloquent\Model;

class Set extends Model
{
    protected $table = "sets";

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


Card. php

<?php

namespace App;

use App\Set;
use Illuminate\Database\Eloquent\Model;

class Card extends Model
{
    protected $table = "cards";

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


В моем Controller я пытался получить результат по этой строке return Set::all()->cards;, но там написано Property [cards] does not exist on this collection instance. Моя миграция В файлах установлен внешний ключ в таблице Cards, поэтому я думаю, что связь между таблицами установлена ​​правильно или, возможно, я ошибаюсь.

Я прочитал подробные Laravel Do c для Eloquent Relationships, но не нашел ни одного запроса, который бы возвращал связанные модели вместе во вложенном JSON, как я и ожидал.

1 Ответ

0 голосов
/ 01 апреля 2020

Использование с запросом

$data = Set::with('cards')->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...