Несколько ресурсов 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())
];
}
}