CONCAT с Laravel красноречивым между двумя полями из поля таблицы - PullRequest
0 голосов
/ 26 октября 2018

Я хочу CONCAT два поля из разных таблиц, используя Laravel elequent. Моя схема такая

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;

Итак, как я могу CONCAT customer.name и customer_types.type как customer_plus_type? Большое спасибо!

1 Ответ

0 голосов
/ 26 октября 2018

Вы должны присоединиться к столам самостоятельно.Использование 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().

...