[英]Laravel Eloquent SQLSTATE[23000]: Integrity constraint violation: 1052 Column ... in where clause is ambiguous
[英]Laravel 6 Error : SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id_perusahaan' in where clause is ambiguous
我想在用戶單擊id
但它的不同表時顯示一些表,但我發現這樣的錯誤:
SQLSTATE[23000]:違反完整性約束:1052 列 'id_perusahaan' 在 where 子句中是不明確的(SQL:select * from produk_usaha inner join 'perusahaan' on 'produk_usaha'.'id_perusahaan' = 'perusahaan'. ' = 134)
你能幫我解決這個問題嗎?
我的控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class MyController extends Controller
{
public function detail($id)
{
$usaha = DB::table('perusahaan')
->join('jenis_produk', 'perusahaan.id_jenis_produk', '=', 'jenis_produk.id_jenis_produk')
->join('pengusaha', 'perusahaan.id_pengusaha', '=', 'pengusaha.id_pengusaha')
->where('id_perusahaan', $id)->first();
$produk = DB::table('produk_usaha')
->join('perusahaan', 'produk_usaha.id_perusahaan', '=', 'perusahaan.id_perusahaan')
->where('id_perusahaan', $id)->get();
$loker = DB::table('lowongan_kerja')
->join('perusahaan', 'lowongan_kerja.id_perusahaan', '=', 'perusahaan.id_perusahaan')
->where('id_perusahaan', $id)->get();
return view('detail', compact('usaha', 'produk', 'loker'));
}
}
查看(detail.blade)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Test View</title>
</head>
<body>
<h2>Info usaha</h2>
<table border="1">
<tr>
<td width="100">Nama Usaha</td>
<td width="10">:</td>
<td>{{ $usaha->nama_perusahaan }}</td>
</tr>
<tr>
<td>Jenis Produk</td>
<td>:</td>
<td>{{ $usaha->nama_jenis_produk }}</td>
</tr>
<tr>
<td>Alamat Usaha</td>
<td>:</td>
<td>{{ $usaha->alamat_perusahaan }}</td>
</tr>
<tr>
<td>Tanggal Didirikan</td>
<td>:</td>
<td>{{ $usaha->tanggal_didirikan }}</td>
</tr>
<tr>
<td>No. Telp</td>
<td>:</td>
<td>{{ $usaha->no_telp }}</td>
</tr>
<tr>
<td>Keterangan Usaha</td>
<td>:</td>
<td>{{ $usaha->keterangan_perusahaan }}</td>
</tr>
</table>
<hr>
<h2>Daftar Produk</h2>
<table border="1">
@foreach($produk as $p)
<tr>
<td><img src="{{ asset('images/produk/'.$p->foto_produk_usaha) }}" alt=""></td>
<td>{{ $p->nama_produk_usaha }}</td>
<td>{{ $p->harga_produk_usaha }}</td>
</tr>
@endforeach
</table>
<hr>
<h2>Lowongan Kerja</h2>
<table border="1">
@foreach($loker as $l)
<tr>
<td>{{ $l->judul_loker }}</td>
<td>{{ $l->deskripsi_loker }}</td>
<td>{{ $l->gaji_loker }}</td>
</tr>
@endforeach
</table>
</body>
</html>
謝謝 :)
在您的 where 查詢中,您需要添加表名。 在內部聯接中,它聯接兩個表。 所以當你得到任何列時,你需要告訴它是哪個表的列。 像這樣寫你的函數。
public function detail($id)
{
$usaha = DB::table('perusahaan')
->join('jenis_produk', 'perusahaan.id_jenis_produk', '=', 'jenis_produk.id_jenis_produk')
->join('pengusaha', 'perusahaan.id_pengusaha', '=', 'pengusaha.id_pengusaha')
->where('perusahaan.id_perusahaan', $id)->first();
$produk = DB::table('produk_usaha')
->join('perusahaan', 'produk_usaha.id_perusahaan', '=', 'perusahaan.id_perusahaan')
->where('perusahaan.id_perusahaan', $id)->get();
$loker = DB::table('lowongan_kerja')
->join('perusahaan', 'lowongan_kerja.id_perusahaan', '=', 'perusahaan.id_perusahaan')
->where('perusahaan.id_perusahaan', $id)->get();
return view('detail', compact('usaha', 'produk', 'loker'));
}
id_perusahaan
列在您要加入的兩個表中,因此在WHERE
,它不知道在哪個表中應用此條件,因此您必須指定表名。
我知道返回的數據應該有具有相同值的兩列,並且指定表名似乎沒用,但是 SQL 不理解。
更改->where('id_perusahaan', $id)->first();
到->where('produk_usaha.id_perusahaan', $id)->first();
或->where('perusahaan.id_perusahaan', $id)->first();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.