2017-02-08 12 views
1

У меня есть таблица, которая имеет столбец interviewer_id, который равен таблице пользователей id. Я группирую данные в соответствии с interviewer_id в своем контроллере и хочу, чтобы имя было присвоено идентификатору каждой группы из таблицы пользователей. Вот что я пробовалПолучение данных столбца другой таблицы с использованием id Laravel

$int_payment = IntPayments::where('month',$month_year)->groupBy('interviewer_id')->get(); 
    foreach ($int_payment as $inter) { 
     $inters = User::where('id',$inter->interviewer_id)->get(); 

    } 
    return response()->json(['inters',$inters]); 

Здесь мой ответ показывает только одну групповую информацию, полученную пользователем. Я хочу получить строку из таблицы пользователей, где ее id - это идентификатор группы

Вот чего я точно хочу. Когда я возвращаю $ int_payment в ответ, я получаю этот ответ.

["inters",[{"id":2,"candidate_id":"13","interviewer_id":"1","profile_id":"","exp":"5-10","payment_status":"unpaid","month":"Feb 2017","created_at":"2017-02-08 04:56:40","updated_at":"2017-02-08 04:56:40"},{"id":4,"candidate_id":"13","interviewer_id":"2\r\n","profile_id":"","exp":"5-10","payment_status":"unpaid","month":"Feb 2017","created_at":"2017-02-08 04:56:40","updated_at":"2017-02-08 04:56:40"},{"id":1,"candidate_id":"13","interviewer_id":"4","profile_id":"","exp":"5-10","payment_status":"unpaid","month":"Feb 2017","created_at":"2017-02-08 04:56:40","updated_at":"2017-02-08 04:56:40"}]] 

Если вы видите ответ есть три группы с идентификаторами 2,4 и 1. Эти идентификаторы идентификатор пользователя в таблице пользователей. Я хочу получить имя пользователя, которое принадлежит идентификаторам.

ответ

0

Попробуйте это:

IntPayments::select('interviewr_TABLE.*', 'users.name')->where('month',$month_year)->leftJoin('users', 'users.id', '=', 'interviewr_TABLE') ->groupBy('interviewer_id')->get() 

Единственная проблема здесь, я не знаю точно, что ваш IntPayments имя таблицы.

+0

Вместо того, чтобы использовать имя таблицы, я забирающий данные с моделью –

+0

Это простой LeftJoin, нет никаких проблем в этом случае, но вы можете определить, что левый присоединиться как модель отношений. –

+0

Но ваш ответ дает мне данные из таблицы USER. Но я хочу только столбец имен из этой таблицы, и данные из IntPayments - мой первый приоритет. Видеть это. вы лучше поймете сценарий http://stackoverflow.com/questions/42129360/merging-different-table-data-into-same-array-in-laravel –

3

Try возвращение $inters в массиве:

foreach ($int_payment as $inter) { 
     $inters[] = User::where('id',$inter->interviewer_id)->get(); 
    } 
return $inters; 

Однако, создание отношений между моделями IntPayment пользователем и будет гораздо легче справиться с такой ситуацией. См документа Eloquent relationship.

+0

Но ваш ответ получает данные из таблицы USER. Но я хочу только столбец имен из этой таблицы, и данные из IntPayments - мой первый приоритет. Видеть это. вы лучше поймете сценарий http://stackoverflow.com/questions/42129360/merging-different-table-data-into-same-array-in-laravel –

+0

@NaveenKumar узнайте и используйте [Eloquent relationship] (https: // laravel.com/docs/5.4/eloquent-relationships), а не даже пытаться таким образом. С настройкой отношений, это будет всего лишь один шаг и один запрос, чтобы добиться того, что вы хотите –

+0

ладно спасибо @sanzeeb. начнет учиться –

0

Просто используйте модель отношения Laravel, чтобы сделать жизнь проще:

Сделать вас User модели есть:

public function intpayments(){ 
    $this->hasMany(IntPayments::class, 'interviewer_id'); 
} 

Тогда ваша IntPayments модели есть:

public function user(){ 
    $this->belongsTo(User::class, 'interviewer_id'); 
} 

Так вы может легко получить тот же результат, который вы хотите получить:

$inters = IntPayments::where('month',$month_year)->load('user'); 

Затем вы можете перебрать этот результат, чтобы получить поля, нужно сказать:

$result = []; 
    foreach($inters as $inter) 
    { 
     $result[] = $inter->user->name; 
    } 
return $result; 

ОБНОВЛЕНО:

Но я хочу только столбец имен из этой таблицы а данные из IntPayments - мой первый приоритет

Итак, вы все равно можете использовать тот же r esult вернулся из запроса:

$result = []; 
    foreach($inters as $k => $inter) 
    { 
     $result[$k]['name'] = $inter->user->name; //this is the user's name 
     $result[$k]['id'] = $inter->id; //this is intPayments's id 
     $result[$k]['interviewer_id'] = $inter->interviewer_id; //this is intPayments interviewer's 'id 
     ...... 
    } 

Может быть, вы не знаете, результат от переменной $inters даст вам первое, каждую запись из IntPayments затем с User для каждого из них.

Это означает, что inters будет, естественно, как (если я пошлю ответ как JSON):

[ 
    { 
    "id": 1, 
    "candidate_id": "1", 
    "interviewer_id": "3" 
    "user": { 
     "id": 1, 
     "name": "second last", 
     "email": "[email protected]", 
    } 
    }, 
    { 
    "id": 2, 
    "candidate_id": "1", 
    "interviewer_id": "5", 
    "user": { 
    "id": 1, 
     "name": "first last", 
     "email": "[email protected]", 
    } 
    }, 
    ..... 
] 

Это означает, что вы можете использовать этот ответ, как вы хотите, и получить доступ к полям, которые вы хотите.

Надеется, что это помогает :)

+0

Но ваш ответ получает данные из таблицы USER. Но я хочу только столбец имен из этой таблицы, и данные из IntPayments - мой первый приоритет. Видеть это. вы лучше поймете сценарий http://stackoverflow.com/questions/42129360/merging-different-table-data-into-same-array-in-laravel –

+0

Я обновляю свои ответы, которые вы можете проверить .... –