【问题标题】:Laravel 6 Error : SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id_perusahaan' in where clause is ambiguousLaravel 6错误:SQLSTATE [23000]:完整性约束违规:1052列'id_perusahaan'在where子句不明确
【发布时间】:2020-01-30 07:47:59
【问题描述】:

我想在用户点击id 时显示一些表格,但它们的表格不同,但我发现了这样的错误:

SQLSTATE[23000]:违反完整性约束:1052 列 where 子句中的“id_perusahaan”不明确(SQL:select * from produk_usaha 在“produk_usaha”上加入“perusahaan”。“id_perusahaan” = 'perusahaan'.'id_perusahaan' 其中 'id_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 子句中,即where('perusahaan.id_perusahaan', $id) 会发挥作用

标签: php mysql laravel laravel-6


【解决方案1】:

在您的 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'));
    }

【讨论】:

    【解决方案2】:

    id_perusahaan 列在你要加入的两个表中,所以在WHERE 中,它不知道在哪个表中应用这个条件,所以你必须指定表名。强>

    我知道返回的数据应该有两列具有相同的值,指定表名似乎没有用,但是 SQL 不明白这一点。

    -&gt;where('id_perusahaan', $id)-&gt;first(); 更改为-&gt;where('produk_usaha.id_perusahaan', $id)-&gt;first();-&gt;where('perusahaan.id_perusahaan', $id)-&gt;first();

    【讨论】:

      猜你喜欢
      • 2022-08-18
      • 2022-11-24
      • 2019-02-22
      • 2021-08-16
      • 2021-10-11
      • 1970-01-01
      • 2020-10-13
      • 2019-04-14
      • 2020-11-23
      相关资源
      最近更新 更多