Php 如何从其他表laravel中选择字段

Php 如何从其他表laravel中选择字段,php,mysql,laravel,laravel-5,controller,Php,Mysql,Laravel,Laravel 5,Controller,我想从另一个表中选择一个字段,如何在laravel中进行选择,我在laravel还是新手 这是我的密码 $company = Company::select( ['companies.id', 'companies.CompanyName', 'companies.Discount', 'companies.OrgNumber', 'companies.ExternalID', 'companies.DCity']) ->join('companystructures AS cs', '

我想从另一个表中选择一个字段,如何在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();
我想从表
companystructures
向字段
ParentCompanyID
添加更多选择

我试着这样做,但还是出错了

$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();

删除
**
并在
中选择

$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();

删除
**
并在
中选择

$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();

你不应该这样做。有一种优雅的方法可以在您的模型上使用

首先,我们将在公司模型中定义这样的hasMany关系

public function structures()
{
  return $this->hasMany(CompanyStructures::class, foreign_key, local_key);
}
return Company::with(['structures' => function(){
    return $query->select(columns_from_child_table);
}])->get([ALL_YOUR_SELECT_COLUMNS]);
现在,当我们试图查询“公司”模型时。我们可以这样做

return Company::with('structures')->get([ALL_YOUR_SELECT_COLUMNS]);
这将返回->get()中定义的所有列,其中所有列与structures表中主键为“Company”模型的列匹配

您可以通过向->with()管道添加闭包来限制数据,并仅获取所需的列。例如,如果我只想获得“company structures location”属性(我假设您将拥有一个),那么我们将这样做

public function structures()
{
  return $this->hasMany(CompanyStructures::class, foreign_key, local_key);
}
return Company::with(['structures' => function(){
    return $query->select(columns_from_child_table);
}])->get([ALL_YOUR_SELECT_COLUMNS]);

我希望这能解决你的问题。我郑重建议您阅读我上面提供的链接中的文档,并确保尽可能多地使用laravel Elotent。根据您的laravel版本参考文档版本。

您不应该这样做。有一种优雅的方法可以在您的模型上使用

首先,我们将在公司模型中定义这样的hasMany关系

public function structures()
{
  return $this->hasMany(CompanyStructures::class, foreign_key, local_key);
}
return Company::with(['structures' => function(){
    return $query->select(columns_from_child_table);
}])->get([ALL_YOUR_SELECT_COLUMNS]);
现在,当我们试图查询“公司”模型时。我们可以这样做

return Company::with('structures')->get([ALL_YOUR_SELECT_COLUMNS]);
这将返回->get()中定义的所有列,其中所有列与structures表中主键为“Company”模型的列匹配

您可以通过向->with()管道添加闭包来限制数据,并仅获取所需的列。例如,如果我只想获得“company structures location”属性(我假设您将拥有一个),那么我们将这样做

public function structures()
{
  return $this->hasMany(CompanyStructures::class, foreign_key, local_key);
}
return Company::with(['structures' => function(){
    return $query->select(columns_from_child_table);
}])->get([ALL_YOUR_SELECT_COLUMNS]);

我希望这能解决你的问题。我郑重建议您阅读我上面提供的链接中的文档,并确保尽可能多地使用laravel Elotent。根据您的laravel版本参考文档版本。

@filesainorama您是否尝试使用
cs.ParentCompanyID
?@filesainorama您是否尝试使用
cs.ParentCompanyID