jeudi 27 août 2015

Laravel hasManyThrough relationship with League/Fractal

I'm struggling to get my head around a Laravel hasManyThrough and League/Fractal Transformers.

I have three tables:

Countries:
    -id (int)
    -other fields ...

Cities:
    -id (int)
    -country_id (int)
    -other fields ...

Users
    -id (int)
    -city_id (string)
    -some other ...

I'm trying to access Users relation from Country via Cities table relation, which is working using following Eloquent query:

$countryUsers = Country::with('users')->where('id', $id)->get();

But when I am trying to user $fractal to transform this relation, I'm getting Segmentation fault (core dumped) error.

In Country Controller I have:

class CountryController extends ApiController
{

     protected $manager;

        function __construct(Manager $manager) {

            $this->manager = $manager;

        }

    public function show(CountryTransformer $countryTransformer, $id) {


        $country = Country::find($id);

        return $this->respondItem($country, $countryTransformer);


    }


    public function respondItem($item, $transformer)

        {

            $this->manager->setSerializer(new CustomArraySerializer());

            $resource = new Item($item, $transformer);

            $data = $this->manager->createData($resource)->toArray();

            return $this->respond($data);

        }

In my country model I have:

public function users() {

    return $this->hasManyThrough('App\Models\User', 'App\Models\City');
}

public function cities() {

    return $this->hasMany('App\Model\City');
}

City Model:

 public function country() {
        return $this->belongsTo('App\Models\Country');
    }

User Model:

 public function city()
    {
        return $this->belongsTo('App\Models\City');
    }

and Fractal country transformer:

<?php namespace App\Transformers;


use App\Models\Country;

use League\Fractal\TransformerAbstract;

class CountryTransformer extends TransformerAbstract {

    protected $defaultIncludes = [
        'users'
    ];

    public function transform(Country $country)
    {
        return [
            'id'            => $country->id,
            'name'          => $country->name,
            'code'          => $country->code,
            'time_zone'     => $country->time_zone,
            'active'        => $country->active,
            'status'        => $country->status,
            'params'        => $country->params
        ];
    }

    public function includeUsers(Country $country)
    {

        $users = $country->users;

        if ($users) {
            return $this->collection($users, new UserTransformer());
        }
    }

}

If anyone can point me in the right direction I'd really appreciate it. Thanks.



from Newest questions tagged laravel-5 - Stack Overflow http://ift.tt/1MQOLTb
via IFTTT

Aucun commentaire:

Enregistrer un commentaire