Laravel:如何在急切加载中获取关联表的列

4

我有三个数据库表。

CREATE TABLE `tblproject` (
  `ProjectID` int(11) NOT NULL,
  `ProjectStatusID` varchar(30) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

CREATE TABLE `tblSkills` (
  `SkillID` int(11) NOT NULL,
  `Skill` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

CREATE TABLE `tblprojectSkills` (
  `ProjectSkillID` int(11) NOT NULL,
  `ProjectID` int NOT NULL,
  `SkillID` int NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

在上述表格中,SkillIDtblSkillstblprojectSkills相关联。 ProjectIDProjectprojectSkills表相关联。 我的项目模型如下。
class Project_Model extends Model
{
    protected $table = "tblproject";
    protected $primaryKey = "ProjectID";
    public $timestamps = false;

    public function ProjectSkills() {
        return $this->hasMany('\App\Models\ProjectSkill_Model', 'ProjectID');
    }        
}

在 Laravel 5.1 中进行数据库查询的方法如下。

\App\Models\Project\Project_Model
::with('ProjectSkills')
->where('ProjectID', '=', $ProjectID)->first();

问题

我可以获取技能ID,但是如何从技能表中获取技能名称?

1个回答

1

您可以使用闭包选择所需的字段:

\App\Models\Project\Project_Model
::with('ProjectSkills' => function($q)
{
    $q->select('SkillID', 'Skill');
})
->where('ProjectID', '=', $ProjectID)->first();

或者,您可以直接在模型的关系中添加所需的字段:

public function ProjectSkills() {
    return $this->hasMany('\App\Models\ProjectSkill_Model', 'ProjectID')
                ->select('SkillID', 'Skill');
} 

我遇到了这个错误:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'skill' in 'field list' (SQL: select SkillID, skillfromtblprojectskillswheretblprojectskills.ProjectID in (10)) - user5694966
@PankajGarg:我看到你的关系可能是通过一个中间表实现多对多,所以你模型中的关系应该是:return $this->belongsToMany('\App\Models\ProjectSkill_Model', 'tblprojectSkills', 'ProjectID', 'SkillID'); 在这里查看 http://laravel.com/docs/5.1/eloquent-relationships#many-to-many。 - Moppo
tblproject中的ProjectIDtblprojectSkills中的ProjectID相关联,而tblSkill中的SkillIDtblprojectSkills中的SkillID相关联。 - user5694966
是的,tblprojectSkills 被称为“枢轴表”,因为它就像两个其他表之间的“枢轴”。它们用于多对多关系。请查看上面的链接,了解它们在 Laravel 中的工作原理。 - Moppo
将其更改为belongsToMany后,我收到了以下错误。 SQLSTATE [42000]:语法错误或访问冲突:1066不唯一的表/别名:'tblprojectskill'(SQL:selectSkillIDtblskilltblprojectskillProjectID作为pivot_ProjectIDtblprojectskillSkillID作为pivot_SkillIDtblprojectskill内部联接tblprojectskill,其中tblprojectskillProjectSkillID=tblprojectskillSkillID在(10)中tblprojectskill.ProjectID`。 - user5694966
tblSkills 表的模型类中,你是否设置了 $table = 'tblSkills' - Moppo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接