从表字段的两个字段之间用Laravel雄辩的CONCAT

时间:2018-10-26 13:55:58

标签: database laravel postgresql concat

我想使用Laravel元素对不同表中的两个字段进行CONCAT。我的架构就是这样

customers:
id
name
number

customer_types:
type
description
taxable_price

每个客户都有一个customer_type。我想CONCAT CUSTOMER.NAME CUSTOMER_TYPES.TYPE作为customer_plus_type:

Desire Output:

    {
      "name": CUSTOMER_NAME,
      "customer_plus_type": CUSTOMER_NAME - TYPEs,
      "customer_type": {
         "customer_plus_type": CUSTOMER_NAME - TYPEs
       }
    }

倒霉的一天,我已经尝试过了。

$customers = Customer::with(['customerType'=> function($q) {
            $q->select(['id',
                DB::raw("CONCAT(custmers.name,' - ',customer_types.type)  AS customer_plus_type")
            ]);
    }])->first();

    return $customers;

那么,如何将customers.name和customer_types.type设置为customer_plus_type? 非常感谢!

1 个答案:

答案 0 :(得分:0)

您必须自己加入表格。使用with('other_table')仅渴望加载相关模型,而不会在一个查询中加载。传递给with()的每个引用模型都将导致一个附加查询。

在您的情况下,解决方案可能如下所示:

$customer = Customer::query()
    ->join('customer_types', 'customers.customer_type_id', '=', 'customer_types.id')
    ->select([
        'customers.*',
        DB::raw("CONCAT(customers.name, ' - ', customer_types.type) as customer_plus_type"),
    ])
    ->first();

这将选择customers表的所有字段以及名称为customer_plus_type的自定义字段。请确保您相应地更改了customers.customer_type_id中的join字段。从您的问题来看,它的命名方式尚不清楚。

顺便说一句,如果仍然需要加载customerType关系,则可以在调用with('customerType')之前的某个位置添加first()