Mintendo Mintendo - 1 month ago 19
JSON Question

Laravel return model relationships in JSON

When I try to return model relationships in JSON, I don't see the relationship fields. That's my query:

$customer_subscriptions = CustomerSubscription::has("customer")
->has("subscription")
->has("federationDiscipline")
->where("customer_id", "=", $customer_id)
->whereHas("subscription", function($query) use($company_id) {
$query->where("company_id", "=", $company_id);
})
->orderBy("start_date", "asc");

return $customer_subscriptions;


That's my result:

[0]=>
array(14) {
["id"]=>
int(2)
["customer_id"]=>
int(1)
["subscription_id"]=>
int(1)
["federation_discipline_id"]=>
int(1)
["start_date"]=>
string(10) "2017-04-01"
["end_date"]=>
string(10) "2017-05-31"
["external_id"]=>
NULL
["notes"]=>
NULL
["created_user_id"]=>
int(1)
["updated_user_id"]=>
NULL
["deleted_user_id"]=>
NULL
["created_at"]=>
string(19) "2017-06-05 07:28:00"
["updated_at"]=>
string(19) "2017-06-05 07:28:00"
["deleted_at"]=>
NULL
}


I don't see the subscription's and the customer's relationship field. The result of query should return JSON to AJAX

Answer Source

Using ->has only acts as a where condition, it doesn't load that relation in to your result set.

You want to use ->with instead.

In your case ->with('subscription','federationDiscipline')

https://laravel.com/docs/5.4/eloquent-relationships#eager-loading