mardi 21 septembre 2021

how to retrieve pivot data from another relationship in API resource

I have 3 models: User, Suburb, City

City hasMany Suburb and Suburb belongsTo a City.

User belongsToMany City and City belongsToMany User.

Suburb belongsToMany User.

There are two pivot tables between these models, and I am using the same API resource User for the response.

class User extends JsonResource
{
   public function toArray($request)
   {
        return 
        [
          'id' => $this->id,
           ........
        ];
   }

}

Now in Suburb page I want to retrieve a field valid_from from City_User pivot table data, So I tried

return [
 'valid_from' => $this->whenPivotLoaded('city_user', function(){
    return $this->pivot->valid_from;
   })
]

However, this returns null as $this->whenPivotLoaded seems point to Suburb-User pivot table not City-User. So this works fine if I navigate to the City page.

I also tried

return [  
 $this->mergeWhen($this->relationLoaded('city'), function () {
                return [
                    'valid_from' => $this->pivot->valid_from,
                ];
            }),]

City-User relation is loaded but still no luck.

dd($this):

App\Http\Resources\User {#900
  +resource: App\User {#837
    #table: "user"
    #guarded: []
    #connection: "mysql"
    #primaryKey: "id"
    #keyType: "int"
    +incrementing: true
    #with: []
    #withCount: []
     .....

User Model:

    public function city(): BelongsToMany
    {
        return $this->belongsToMany(City::class, 'city_user')
        ->withPivot('valid_from')
        ;
    }

What I did wrong?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire