get() will always return a Collection, use first() instead to return a single instance
return ClassDetailResource::collection(
ClassDetail::where('course_id',$request->id)->with('classes')->with('teach')->first()
);
Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.
Hello,I want to crate api with laravel,But my code show error like that.. Property [id] does not exist on this collection instance this is from my controller...
public function read(Request $request){
return ClassDetailResource::collection(ClassDetail::where('course_id',$request->id)->with('classes')->with('teach')->get());
}
this is ClassDetail model..
class ClassDetail extends Model
{
public function classes(){
return $this->hasMany('App\Class_');
}
public function teacher(){
return $this->belongsTo('App\Teacher');
}
public function teach(){
return $this->teacher()->select('id','name');
}
}
this is classdetail resource...
public function toArray($request)
{
return [
'id'=>$this->id,
'name'=>$this->name,
'count'=>count($this->classes),
'course_id'=>$this->course_id,
'classes'=>new ClassResource($this->whenLoaded('classes')->slice(0,3)),
];
}
this is Class Resource..
public function toArray($request)
{
return [
'id'=>$this->id,
'img_url'=>$this->img_url,
'status'=>$this->status,
'title'=>$this->title,
'description'=>$this->description,
'price'=>$this->price,
'teacher_id'=>new TeacherResource($this->whenLoaded('teach')),
'created_at'=>$this->created_at
];
}
it show error like that..
"message": "Property [id] does not exist on this collection instance.",
"exception": "Exception",
"file": "/home/aung/Desktop/conceptX/vendor/laravel/framework/src/Illuminate/Support/Collection.php",
"line": 1879,
Because it's a one-to-many relationship.
Using this new ClassResource($this->whenLoaded('classes')->slice(0,3)) expects 'classes' relationship to be one-to-one or many-to-one, you should use this:
'classes' => ClassResource::collection($this->whenLoaded('classes')->slice(0,3)),
Please or to participate in this conversation.