Несколько ресурсов API в одном вызове с использованием laravel

Я использую Ресурсы API для laravel для преобразования ресурса в массив для вызова API, и он работает нормально. Возможно ли, что я могу получить данные нескольких моделей за один вызов? Как получить JSON-данные пользователей вместе со Pages JSON? Или мне нужен отдельный звонок для этого.

Вот что я пробовал до сих пор

//Controller
public function index(Request $request)
{
    $users = User::all();
    $pages = Page::all();
    return new UserCollection($users);
}

//API Resource
public function toArray($request)
    {
        return [
            'name' => $this->name,
            'username' => $this->username,
            'bitcoin' => $this->bitcoin,
        ];
    }

Любая помощь будет высоко оценена

1 ответ

Решение

Вы можете сделать следующее:

public function index(Request $request)
{
    $users = User::all();
    $pages = Page::all();
    return new response()->json([
        'users' => new UserCollection($users),
        'pages' => new PageCollection($pages),
    ]);
}

Laravel 6..

Это должно сработать на 100%, если вам нравится то, что показано ниже, вы действительно помогли мне разобраться с проблемой, с которой я столкнулся, и это ответ на эту услугу:3. изменяет ниже:

'advertisements' => new AdvertisementCollection(Advertisement::latest()->get()),

to (будет работать с vatiable или просто с прямым запросом db)

'advertisements' => AdvertisementCollection::collection(Advertisement::latest()->get())



class HomeController extends Controller
{
    public function index()
        {
           $ads = Advertisement::latest()->get();
           $banners = Banner::latest()->get();
           $sliders = Slider::latest()->get()
            return [
                'advertisements' => AdvertisementCollection::collection($ads),
                'banners' => BannerCollection::collection($banners),
                'sliders' => SliderCollection::collection($sliders),
                ];
        }
}

Я использую laravel 6.x, И я не знаю, что laravel преобразует ответ или что-то делает, но я получаю ответ какJSON также в следующих условиях:

class HomeController extends Controller
{
    public function index()
        {
            return [
                'advertisements' => new AdvertisementCollection(Advertisement::latest()->get()),
                'banners' => new BannerCollection(Banner::latest()->get()),
                'sliders' => new SliderCollection(Slider::latest()->get())
                ];
        }
}
Другие вопросы по тегам