Laravel nested eloquent relationships using model

Viewed 26

I am trying to getting the more sorted object as output using laravel eloquent relationships

Section::with(['fieldTypes','fields'=>
        function ($query) use ($id) {
            $query->where('user_id', '=', $id);
        },
        'fields.fieldType'=> function ($query)  {
            $query->select('id','type','url','icon');
        }])->get();

Output

"fields": [
                    {
                        "id": 1,
                        "user_id": 1,
                        "field_type_id": 1,
                        "section_id": 3,
                        "title": "Facebook",
                        "value": "inderjit",
                        "order": 1,
                        "field_type": {
                            "id": 1,
                            "type": "facebook",
                            "url": "https://www.facebook.com/"
                        }
                    }
                ]

I want output like this . I want to merge 2 objects as one

"fields": [
    {
        "id": 1,
        "user_id": 1,
        "field_type_id": 1,
        "section_id": 3,
        "title": "Facebook",
        "value": "inderjit",
        "order": 1,
        "type": "facebook",
        "url": "https://www.facebook.com/"
    }
]
1 Answers

Something like this. You can add a method in your model where you trigger a leftJoin. Then you have the fields of the relation in the model.

public function scopeJoinWithFieldTypes($query)
{
    return $query->leftJoin("field_types", "field_type.id", "=", "fields.id");
}
Related