как выбрать поле из другой таблицы laravel - PullRequest
0 голосов
/ 29 ноября 2018

я хочу выбрать поле из другой таблицы, как я могу это сделать в laravel, я все еще новичок в laravel.

здесь мой код

$company = Company::select(
['companies.id', 'companies.CompanyName', 'companies.Discount', 'companies.OrgNumber', 'companies.ExternalID', 'companies.DCity'])
 ->join('companystructures AS cs', 'cs.ChildCompanyID', '=', 'companies.id')
 ->where(['companies.Active' => 1, 'cs.Active' => 1])->get();

я хочу добавить большевыберите в поле ParentCompanyID из таблицы companystructures.

я пытаюсь вот так, но получаю ошибку

$company = Company::select(['companies.id', 'companies.CompanyName', 'companies.Discount', 'companies.OrgNumber','companies.ExternalID', 'companies.DCity', '**companystructures.ParentCompanyID**'])
 ->join('companystructures AS cs', 'cs.ChildCompanyID', '=', 'companies.id')
 ->where(['companies.Active' => 1, 'cs.Active' => 1])->get();

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Ты не должен делать это так.Существует элегантный способ сделать это, используя Eloquent Relationships в вашей модели

Сначала мы определим отношение hasMany в модели компании следующим образом.

public function structures()
{
  return $this->hasMany(CompanyStructures::class, foreign_key, local_key);
}

Теперькогда мы пытаемся запросить модель «Компания».Мы можем сделать это следующим образом:

return Company::with('structures')->get([ALL_YOUR_SELECT_COLUMNS]);

Это вернет все столбцы, определенные в -> get (), со всеми столбцами, совпадающими в таблице структур с первичным ключом модели "Company".

Вы можете ограничить данные, добавив замыкание в канал -> with (), и получите только те столбцы, которые вам нужны.Например, если я хочу получить только свойство «расположение структур компании» (я предполагаю, что у вас будет такое), мы бы сделали что-то вроде этого.

return Company::with(['structures' => function(){
    return $query->select(columns_from_child_table);
}])->get([ALL_YOUR_SELECT_COLUMNS]);

Надеюсь, это решит ваш ответ.Я настоятельно рекомендую вам прочитать документацию по приведенной выше ссылке и убедиться, что вы используете laravel eloquent в максимально возможной степени.Обратитесь к версии документа в соответствии с вашей версией Laravel.

0 голосов
/ 29 ноября 2018

Удалите ** и используйте cs.ParentCompanyID вместо companystructures.ParentCompanyID in select

$company = Company::select([
                 'companies.id', 
                 'companies.CompanyName', 
                 'companies.Discount', 
                 'companies.OrgNumber',
                 'companies.ExternalID', 
                 'companies.DCity', 
                 'cs.ParentCompanyID'
             ])
          ->join('companystructures AS cs', 'cs.ChildCompanyID', '=', 'companies.id')
          ->where(['companies.Active' => 1, 'cs.Active' => 1])
          ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...