Laravel 5 - Melakukan penggabungan dengan tabel database

Saya punya beberapa skema seperti itu

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();
});

Jadi seorang Pengguna termasuk dalam suatu Departemen, dan suatu Departemen dapat memiliki banyak Pengguna.

Di salah satu pengontrol saya, saya biasa melakukan hal berikut untuk mendapatkan daftar pengguna untuk departemen tertentu

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

Karena saya memperoleh departemen dari Direktori Aktif, saya menyadari bahwa ini bukan cara yang baik karena id departemen berubah. Karena itu, saya sekarang perlu mendapatkan pengguna melalui departmentName. Saat ini saya sedang mencoba sesuatu seperti ini

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

Namun, ini mengembalikan kesalahan berikut

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`)

Bagaimana mungkin mendapatkan semua pengguna untuk nama departemen tertentu? Jadi katakanlah saya ingin mendapatkan semua pengguna yang tergabung dalam departemen Teknologi, bagaimana saya bisa melakukan ini?

Terima kasih


person katie hudson    schedule 22.02.2016    source sumber


Jawaban (1)


Anda melewatkan nama tabel departemen sehingga sql menjadikan departmentId ambigu karena dapat ditemukan di tabel pengguna dan departemen. Permintaan Anda seharusnya seperti ini.

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

tetapi jika Anda ingin memfilter berdasarkan nama departemen maka Anda harus menambahkan klausa Where seperti ini

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