2016-09-20 2 views
0

Я работаю над приложением laravel 5. У меня проблема с получением результатов из двух таблиц базы данных. вот что у меня есть:Laravel MySql join table

table A: 'courses' 

id | Course 
———————————————— 
1 | Math 
2 | History 
3 | Geography 
4 | Computer 

и Таблица B

user_id | classroom_id | course 
1  | 5   | 3 
1  | 5   | 4 
1  | 6   | 2 

Я возвратил таблицу А на каждой петле, но я хотел бы, чтобы проверить, какие курсы user_id 1 должен возвращать истинным или ложным на каждый столбец для каждого цикла. Что-то вроде этого:

Возвращенный деталь для user_id 1:

id | course  | status 
____________________________ 
1 | Math  | false 
2 | History | true 
3 | Geography | true 
4 | Computer | true 

Это у меня есть:

$AllList = DB::table('users') 
      ->join('courses', 'users.id', '=', 'courses.parent_id') 
      ->join('classroom', 'users.id', '=', 'classroom.user_id')->where('classroom_id', '=', 5)  
      ->get(); 

Любая помощь приветствуется.

+1

Левое соединение должно это сделать, если оно пустое, то оно «ложно» –

+0

@ka_lin Спасибо за комментарий, но какой должен быть код? –

+0

Что у вас есть? –

ответ

2

Просто замените joinleftJoin с:

$AllList = DB::table('courses') 
      ->select('courses.id','course.name') 
      ->leftJoin('users', 'users.id', '=', 'courses.parent_id') 
      ->join('classroom', 'users.id', '=', 'classroom.user_id')->where('classroom_id', '=', 5)  
      ->get(); 

Course поле будет NULL таким образом пустая строка, если нет матча

+0

Спасибо за ваш ответ. Итак, как ограничить возвращаемые столбцы, потому что у меня есть все столбцы на обеих таблицах. –

+1

Просто добавьте '-> select ([имя столбца как массив]);' как я сделал выше –

+0

Прохладный, спасибо. Я только что проголосовал за вас и не выбрал в качестве принятого ответа, чтобы получить больше ответов от других людей. Еще раз спасибо –

1

строки ниже кода поможет ...

$getCourse = DB::table('courses')->get(['id','course']); 

    $getCourse = collect($getCourse)->map(function($x){ return (array) $x; })->toArray(); 

    foreach ($getCourse as $key => $value) 
    { 
     $flag = DB::table('classroom') 
        ->where('user_id',1) 
        ->where('course',$value['id']) 
        ->pluck('id'); 
     if($flag) 
     { 
      $getCourse[$key]['status'] = true; 
     } 
     else 
     { 
      $getCourse[$key]['status'] = false; 
     } 
    } 

    dd($getCourse);