У меня есть следующий метод в моем классе user
:Laravel 5,2 красноречивое название колонки конфликт
/**
* Get all organisations for user (if owner)
*
* @param
*/
public function getOrganisationsOwned()
{
// If the user is owner of any one or many organisations then return this list
return Organisation::leftJoin('subscription_plans', 'organisations.subscription_plan_id', '=', 'subscription_plans.id')
->where('organisations.owner_id', '=', $this->id)
->select('organisations.*', 'subscription_plans.*')
->get();
}
метод по существу запросов и соединяет две таблицы. Каждая таблица имеет столбец title
.
Выход из вышеизложенного генерирует строки по мере необходимости с правой информацией, но возвращает только один столбец title
, из правой таблицы (subscription_plans
), но не столбец title
из левой таблицы (organisations
). Я также замечаю, что также отбрасывает временные метки из одной таблицы, так как они имеют одинаковое имя столбца.
я понял, что
->select('organisations.*', 'subscription_plans.*')
бы сделать запрос возвращал обе колонки. Что мне не хватает? С новым годом!
PS: ниже копия dd()
содержание для коллекции, с title
только один раз.
#attributes: array:44 [▼
"id" => 1
"title" => "Monthly Subscription"
"address_1" => "34 Florence Street"
"address_2" => ""
"suburb" => "Hornsby"
"state" => "NSW"
"postcode" => "2077"
"country_id" => 12
"currency_id" => 12
"time_zone_id" => 109
"phone" => "0392144497"
"website" => "http://www.Tremblay.com/est-aspernatur-et-ut-provident.html"
"business_id" => "82297955560"
"tax_registration" => 1
"logo" => "8aa656de-2bc2-4e14-dddd-e02fbcd2b76f"
"quote_terms_days" => 14
"invoice_terms_days" => 14
"fiscal_start_id" => 7
"industry_id" => 4
"company_size_id" => 3
"date_format_id" => 2
"date_time_format_id" => 20
"owner_id" => 1
"gateway_id" => "1"
"gateway_username" => "xxx"
"gateway_password" => "xxx"
"gateway_signature" => "xxx"
"gateway_accepted_cards" => "[1, 2, 3]"
"subscription_plan_id" => 1
"trial_ends_at" => "2015-11-07"
"grace_ends_at" => "2016-02-10"
"subscription_ends_at" => "2016-01-11"
"latitude" => "-33.70433500"
"longitude" => "151.10161900"
"registration" => "done"
"deleted_at" => null
"created_at" => "2016-01-01 14:59:47"
"updated_at" => "2016-01-01 14:59:47"
"amount" => "9.09"
"gst" => "0.91"
"gst_amount" => "10.00"
"billing_cycle" => "MONTH"
"trial_period_days" => 30
"grace_period_days" => 30
]
«отсутствующий» title
колонка содержит:
'title' => 'ABC Electrical'
Как вы знаете, что запрос не возвращает оба столбца? Как вы попытались получить 2 столбца? – Shadow
Я делаю 'dd()' и проверяю содержимое коллекции. заголовок столбца появляется только один раз. Как я выбираю столбцы в запросе выше. – TheRealPapa
Я предполагаю, что запрос извлекает оба столбца заголовка (получает строку sql и вставляет ее в ваше избранное приложение управления mysql и выполняет его), но когда результаты преобразуются в массив php где-то, одно и то же имя вызывает переназначение 2 столбца к одному и тому же ключу, поэтому значение из правой таблицы переопределяет значение из левой таблицы. Я бы использовал var_dump() для результатов, чтобы узнать, что действительно было извлечено. Вместо использования * вы можете перечислить имена полей один за другим и предоставить псевдонимы для двух полей заголовка. – Shadow