首页 > 解决方案 > 雄辩的子查询因已知字段而失败

问题描述

我试试这个查询:

        $invoice =  Invoice::query()
        ->select([
            'invoices.id',
            'invoices.created_at',
            'invoices.start_date',
            'invoices.end_date',
            'agencies.name as agency',
            'agencies.address',
            'agencies.zipcode',
            'agencies.phone',
            'consumers.name as consumer',
            'consumers.addresses',
            'invoice_items.amount as total',
            'billings.hours',
            'billings.rate',
            'billings.amount',
        ])
        ->addSelect(['agency_address' => \App\Models\City::select('address')
            ->whereColumn('cities.zipcode', 'agencies.zipcode')
            ->first()->address])
        ->leftJoin('agencies', 'agencies.id', 'invoices.agency_id')
        ->leftJoin('cities', 'cities.zip', 'agencies.zipcode')
        ->leftJoin('invoice_items', 'invoice_items.invoice_id', 'invoices.id')
        ->leftJoin('billings', 'billings.id', 'invoice_items.billing_id')
        ->leftJoin('consumers', 'consumers.id', 'billings.consumer_id')
        ->find($id);

但它失败了:

SQLSTATE [42S22]:未找到列:1054 'where 子句'中的未知列 'agencies.zipcode'(SQL:addressv_citieswhere v_cities. zipcode= agencies. zipcodelimit 1 中选择)

该字段包含在主选择中,并且在没有 addSelect 方法的情况下可以很好地返回数据。可能是什么原因?

标签: phpmysqllaraveleloquentsubquery

解决方案


推荐阅读