2017-01-27 12 views
0

У меня есть 2 таблицы Customer (Parent) и jobCode (ребенок) с одного до многих отношенийLaravel, добавив атрибут возвращенного JSON присоединяет весь объект

Я хочу, чтобы получить запись на ребенок, но с одним дополнительным полем от родителя (customerGuid). Мой код:

$jobCodes=JobCode::all(); 

foreach ($jobCodes as $jobCode) { 
    $jobCode['customerGuid']=$jobCode->customer->guid; 

    // I also tried $jobCode->setAttribute('customerGuid',$jobCode->customer->guid); 
} 

return $jobCodes; 

Я ожидал только родитель guid поля прилагаются к каждому jobCode объекту и возвращается. Однако возвращается родительский объект ENTIRE customer!

[{ 
    "id": 137, 
    "customerId": 1, 
    "jobCode": "Journeyman Plumber", 
    "jobDescription": "Journeyman Plumber", 
    "created_at": null, 
    "updated_at": "2017-01-27 12:20:27", 
    "guid": "28f35e94-e483-11e6-98e9-e0db55883624", 
    "customerGuid": "8d48931d-dc61-11e6-8927-e0db55883624", 
    "customer": { 
     "id": 1, 
     "name": "ACME", 
     "address1": "", 
     "address2": "", 
     "city": "San Jose", 
     "zip": "", 
     "phone": "", 
     "fax": "", 
     "email": "", 
     "guid": "8d48931d-dc61-11e6-8927-e0db55883624", 
     "stateName": "California", 
     "created_at": null, 
     "updated_at": "2017-01-20 07:10:59" 
    } 
}, { 
    "id": 138, 
    "customerId": 1, 
    "jobCode": "JRP PreFab", 
    "jobDescription": "JRP", 
    ......, 
+0

Здравствуйте, пожалуйста, вы можете поделиться результат дд (JobCode :: все()); ? –

+0

Я думаю, вы имеете в виду dd (jobCodes :: all()). Это тот же результат. Включает в себя всю запись клиента вместо одного поля customerGuid ----------- {"id": 137, "customerId": 1, "jobCode": "Journeyman Plumber", "jobDescription" : «Journeyman Plumber», «created_at»: null, «updated_at»: «2017-01-27 12:20:27», «guid»: «28f35e94-e483-11e6-98e9-e0db55883624», «customerGuid»: 8d48931d-dc61-11e6-8927-e0db55883624 ", " клиент ": {" id ": 1," name ":" ACME "," address1 ":" "," address2 ":" "," city ":" Milpitas», "молния": "", "телефон": "", "факс": "", "электронная почта": "", "справы": "8d48931d-dc61-11e6-8927-e0db55883624", "StateName" : «Cali ... –

+0

Таким образом, это означает, что это не из-за вашего setAttribute, вы написали его правильно, проблема в ваших реляционных методах JobCodes Model. Можете ли вы поделиться им, пожалуйста? –

ответ

0

Его, потому что ваш оператор возврата возвращает $jobCodes;, который всю таблицу вы получить здесь: $jobCodes=JobCode::all();

попробовать положить это внутри цикла echo '$jobCode', чтобы увидеть, что выходной сигнал каждый раз, когда он петлями

+0

Получаю тот же результат. Объект родительского клиента вложен внутри объекта jobCode. Мой код запрашивает только одно поле из таблицы клиентов: customerGuid –

0

Достижение для отношения customer на $jobCode вы автоматически лените загрузить объект отношений, который хранится в атрибуте $jobCode->customer.

Попробуйте это вместо того, чтобы просто вернув коллекцию:

// return $jobCodes; 

return $jobCodes->map(function($jobCode){ 
      $jobCode = $jobCode->toArray(); 
      unset($jobCode['customer']); 
      return $jobCode; 
     }); 
+1

Отлично .. это сработало. Я сделал это. foreach ($ jobCodes as $ jobCode) { // добавление дополнительного атрибута $ jobCode ['customerGuid'] = $ jobCode-> customer-> guid; unset ($ jobCode ['customer']); } return $ jobCodes; –