2016-08-03 40 views
-1

Dies ist mein der Code meiner Abfrage:Mysql - SQLSTATE [42S22]: Column nicht gefunden: 1054 Unknown column

$payments = DB::table('payments') 
        ->join('invoices', 'invoices.id', '=', 'payments_invoices.invoice_id') 
        ->join('payments_invoices', 'payments.id', '=', 'payments.payment_id') 
        ->leftJoin('clients', 'clients.id', '=', 'payments.client_id') 
        ->leftJoin('contacts', 'contacts.client_id', '=', 'clients.id') 
        ->where('payments.account_id', '=', Auth::user()->account_id) 
        ->where('payments.is_deleted', '=', false) 
        ->where('invoices.is_deleted', '=', false) 
        ->where('clients.is_deleted', '=', false) 
        ->where('contacts.deleted_at', '=', null); 

, wenn ich versuche, das Ergebnis dieser Abfrage zu zeigen, es gibt mir:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'payments_invoices.invoice_id' in 'on clause' (SQL: select `payments`.`payment_date`, `payments`.`amount`, `invoices`.`public_id`, `invoices`.`invoice_number`, `clients`.`name` as `client_name`, `contacts`.`email`, `contacts`.`first_name`, `contacts`.`last_name`, `clients`.`currency_id`, `clients`.`public_id` as `client_public_id`, `clients`.`user_id` as `client_user_id` from `payments` inner join `invoices` on `invoices`.`id` = `payments_invoices`.`invoice_id` inner join `payments_invoices` on `payments`.`id` = `payments`.`payment_id` left join `clients` on `clients`.`id` = `payments`.`client_id` left join `contacts` on `contacts`.`client_id` = `clients`.`id` where `payments`.`account_id` = 1 and `payments`.`is_deleted` = 0 and `invoices`.`is_deleted` = 0 and `clients`.`is_deleted` = 0 and `contacts`.`deleted_at` is null and `contacts`.`is_primary` = 1 order by `payments`.`payment_date` desc limit 50) 

zu wissen, dass diese Abfrage korrekt funktioniert:

$query = DB::table('payments') 
        ->join('accounts', 'accounts.id', '=', 'payments.account_id') 
        ->join('clients', 'clients.id', '=', 'payments.client_id') 
        ->join('invoices', 'invoices.id', '=', 'payments_invoices.invoice_id') 
        ->join('payments_invoices', 'payments.id', '=', 'payments.payment_id')      
        }) 
        ->leftJoin('payment_types', 'payment_types.id', '=', 'payments.payment_type_id') 
        ->where('clients.is_deleted', '=', false) 
        ->where('payments.is_deleted', '=', false) 
        ->where('invitations.deleted_at', '=', null) 
        ->where('invoices.deleted_at', '=', null) 
        ->where('invitations.contact_id', '=', $contactId) 
        ); 

, was soll ich tun, bitte ??

+0

Ihre Tabellendefinition Fügen Sie – jonju

+0

Zahlungen ('id', 'account_id', 'client_id', 'Menge', 'user_id', 'payment_date') –

Antwort

1

Diese Linie

->join('payments_invoices', 'payments.id', '=', 'payments.payment_id') 

sense.You keine andere Join-Tabelle machen versuchen, ein Feld aus der Tabelle mit itself.So Sie wahrscheinlich auf payments_invoices.payment_id

anschließen möchten, dann können Sie die Reihenfolge ändern versuchen in denen verbinden Sie die Tabellen

$payments = DB::table('payments') 
        ->join('payments_invoices', 'payments.id', '=', 'payments_invoices.payment_id') 
        ->join('invoices', 'invoices.id', '=', 'payments_invoices.invoice_id') 

        ->leftJoin('clients', 'clients.id', '=', 'payments.client_id') 
        ->leftJoin('contacts', 'contacts.client_id', '=', 'clients.id') 
        ->where('payments.account_id', '=', Auth::user()->account_id) 
        ->where('payments.is_deleted', '=', false) 
        ->where('invoices.is_deleted', '=', false) 
        ->where('clients.is_deleted', '=', false) 
        ->where('contacts.deleted_at', '=', null); 
+0

funktioniert immer noch nicht Spalte nicht gefunden: 1054 Unbekannte Spalte payments.payment_id –

+0

Überprüfen Sie meine aktualisierte Antwort. –

+0

Danke Genie! es funktioniert richtig: * –

0

Basis von Anfrage:

$payments = DB::table('payments') 
        ->join('invoices', 'invoices.id', '=', 'payments_invoices.invoice_id') 
        ->join('payments_invoices', 'payments.id', '=', 'payments.payment_id') 

Sie schließen sich payments Tabelle invoices Tisch. Und Ihre on-Klausel sieht so aus: ON invoices.id = payments_invoices.invoice_id

Aber payments_invoices Tabelle wurde nur in der nächsten Zeile verbunden.

Korrigieren Sie einfach die Beziehung zwischen payments und invoices Tabelle (wenn es), dann ist es gut.

Seit payments und invoices ist many-to-many: versuchen Sie dies:

DB::table('payments') 
       ->join('payments_invoices', 'payments.id', '=', 'payments_invoices.payment_id') 
       ->join('invoices', 'invoices.id', '=', 'payments_invoices.invoice_id') 

Falls Sie payments_id Spalte auf payments_invoices Tisch.

+0

aber OP verwendet die gleiche payment.payment_id in ihrer Arbeitsabfrage – jonju

+0

'payments_invoices' Tabelle ist eine Join-Tabelle, die auf" Rechnungen "und" Zahlungen "-Tabellen sowohl –

+0

beigetreten ist, muss zuerst kommen. 'payments_invoices.invoice_id' wurde verwendet, aber' payments_invoices' war noch nicht beigetreten. – KaeL