【问题标题】:Mysql - SQLSTATE[42S22]: Column not found: 1054 Unknown columnMysql - SQLSTATE [42S22]:找不到列:1054 未知列
【发布时间】:2016-08-03 08:48:28
【问题描述】:

这是我的查询代码:

$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);

当我尝试显示此查询的结果时,它给了我:

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) 

知道这个查询可以正常工作:

$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)
                    );

请问我该怎么办??

【问题讨论】:

  • 包括你的表定义
  • payments('id','account_id','client_id','amount','user_id','payment_date')

标签: mysql laravel laravel-5 query-builder


【解决方案1】:

这一行

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

没有意义。您尝试使用表本身的字段加入另一个表。所以您可能想加入 payments_invoices.payment_id

然后您可以尝试更改加入表格的顺序

$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);

【讨论】:

  • 还是不行Column not found: 1054 Unknown column 'payments.payment_id
  • 很高兴能帮到你:)
【解决方案2】:

来自您的查询:

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

您正在将payments 表加入invoices 表。你的 on 子句看起来像:ON invoices.id = payments_invoices.invoice_id

payments_invoices 表只在下一行加入。

只要纠正paymentsinvoices表之间的关系(如果有的话)就好了。

由于paymentsinvoices 是多对多的:试试这个:

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

如果您在 payments_invoices 表上有 payments_id 列。

【讨论】:

  • 但 OP 在她的工作查询中使用相同的 payment.payment_id
  • payments_invoices table 是一个连接表,它连接到 invoicespayments 两个表
  • 必须先加入。 payments_invoices.invoice_id 已使用,但 payments_invoices 尚未加入
  • @Lara paymentsinvoices 表有什么关系?如果没有,那么你应该先加入payments_invoices
猜你喜欢
  • 2016-04-09
  • 2018-02-21
  • 2015-12-08
  • 2018-11-02
  • 2016-01-12
  • 2020-09-02
  • 2019-10-02
相关资源
最近更新 更多