2016-02-22 2 views
0

У меня есть несколько схем, как такLaravel 5 - Выполнение объединения с таблицами базы данных

Schema::create('users', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('userName')->default(''); 
    $table->string('userEmail')->default(''); 
    $table->tinyInteger('active')->default(1); 
    $table->integer('departmentId')->unsigned()->default(0); 
    $table->foreign('departmentId')->references('departmentId')->on('departments')->onDelete('cascade'); 
    $table->timestamps(); 
}); 

Schema::create('departments', function (Blueprint $table) { 
    $table->primary('departmentId'); 
    $table->integer('departmentId')->unsigned()->default(0); 
    $table->string('departmentName')->default(''); 
    $table->tinyInteger('active')->default(1); 
    $table->timestamps(); 
}); 

Так Пользователь принадлежит Департаменту, и Департамент может иметь множество пользователей.

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

$users = User::select('userName', 'id')->where('departmentId', 2)->get(); 

Поскольку я получить отделы из Active Directory, я с тех пор обнаружил, что это не хороший способ, потому что идентификаторы для отделов меняются. Таким образом, теперь мне нужно получить пользователей через departmentName. На данный момент я пытаюсь что-то вроде этого

$test = DB::table('users') 
     ->join('departments', 'users.departmentId', '=', 'departmentId') 
     ->select('users.userName', 'users.id') 
     ->get(); 

Однако это возвращает следующую ошибку

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'departmentId' in on clause is ambiguous (SQL: select `users`.`userName`, `users`.`id` from `users` inner join `departments` on `users`.`departmentId` = `departmentId`) 

Как бы это было возможно, чтобы получить все пользователи для конкретного departmentName? Так сказать, я хотел получить всех пользователей, которые принадлежат к отделу технологий, как я могу это сделать?

Благодаря

ответ

2

Вы пропустили имя отделов таблицы так SQL оказали DepartmentID как неоднозначные, так как он может быть найден в обоих пользователей и отделов таблицы. Ваш запрос должен быть таким.

$test = DB::table('users') 
    ->join('departments', 'users.departmentId', '=', 'departments.departmentId') 
    ->select('users.userName', 'users.id') 
    ->get(); 

, но если вы хотите, чтобы фильтровать по имени отдела, то вы должны добавить, где положение, как это

$test = DB::table('users') 
    ->join('departments', 'users.departmentId', '=', 'departments.departmentId') 
    ->select('users.userName', 'users.id') 
    ->where('departments.departmentName', "department name goes here") 
    ->get();