Laravel 6 Ошибка: SQLSTATE [23000]: Нарушение ограничения целостности: 1052 Столбец «id_perusahaan», где предложение неоднозначно - PullRequest
0 голосов
/ 30 января 2020

Я хочу отобразить некоторые таблицы, когда пользователь нажимает id, но разные таблицы, но я обнаружил ошибку, подобную этой:

SQLSTATE [23000]: Нарушение ограничения целостности: 1052 Столбец 'id_perusahaan' в, где предложение неоднозначно (SQL: выберите * из produk_usaha внутреннее объединение 'perusahaan' на 'produk_usaha'. 'id_perusahaan' = 'perusahaan'. 'id_perusahaan' где 'id_perusahaan' = 134)

Можете ли вы помочь мне решить эту проблему?

MyController

<?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>

Спасибо:)

Ответы [ 2 ]

0 голосов
/ 30 января 2020

Столбец id_perusahaan находится в двух таблицах, к которым вы присоединяетесь, поэтому в WHERE он не знает, к какой таблице применить это условие, , поэтому вы должны указать имя таблицы.

Я знаю, что возвращаемые данные должны иметь два столбца с одинаковым значением, и указание имени таблицы кажется бесполезным, но SQL этого не понимает.

Изменить ->where('id_perusahaan', $id)->first(); на ->where('produk_usaha.id_perusahaan', $id)->first(); или ->where('perusahaan.id_perusahaan', $id)->first();

0 голосов
/ 30 января 2020

в вашем запросе где вам нужно добавить имя таблицы. Во внутреннем объединении он объединяет две таблицы. Поэтому, когда вы получаете какой-либо столбец, вам нужно указать, какой это столбец таблицы. напишите свою функцию следующим образом.

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'));
    }
...