I have one to many relation for User and Student.
Model User.php
public function students() { return $this->hasMany(Student::class); }
Model Student.php
public function user(){ return $this->belongsTo(User::class); }
and in Controller.php
public function show(){ $users = User::with('students')find(5); return response()->json($users); }
it will run and return json
{ "id": 5, "email": "student1@test.com", "email_verified_at": null, "created_at": "2021-06-27T01:52:28.000000Z", "updated_at": "2021-06-27T01:52:28.000000Z", "students": [ { "id": 1, "user_id": 5, "firstname": "Ms", "lastname": "Zee", "studentPhone": "08515xxxxxxx", "studentAddress": "my address" }, { "id": 5, "user_id": 5, "firstname": "my Name", "lastname": "k",, "studentPhone": "085xxxxxx", "studentAddress": "my address", } ] }
can I custom select in Students, only show firstname and lastname ?
Advertisement
Answer
You should use API Resources for this. Here’s a link to the official documentation: https://laravel.com/docs/8.x/eloquent-resources
Your student collection could look something like this:
<?php namespace AppHttpResources; use IlluminateHttpResourcesJsonResourceCollection; class StudentCollection extends ResourceCollection { /** * Transform the resource collection into an array. * * @param IlluminateHttpRequest $request * @return array */ public function toArray($request) { return [ 'firstname' => $this->firstname, 'lastname' => $this->lastname, ]; } }