我想使用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? 非常感谢!
答案 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()
。