我实际上正在与Laravel合作,我知道如何获得一些帖子,但是如果我想使用leftJoin,当我尝试通过id获得一个帖子时,我有点迷失。
我有一个名为项目和组的表。它们有很多关系,所以我还创建了一个名为project_group的数据透视表。
此代码将返回索引页面上的项目集合。
$projects = DB::table('projects as p')
->leftJoin('project_group as pb', 'pb.project_id', 'p.id')
->join('groups as g', 'g.id', 'pb.bodywork_id')
->select('p.*', 'g.*')
->orderBy('p.created_at', 'desc')
->paginate(10);
在单页上我也想使用这样的东西,只是为了获得基于ID(主键)的项目。
$project = Project::find($id)
工作正常,但没有leftJoin,我无法访问其他表的列。当我尝试使用与索引页面类似的代码时,它只使用 - > first(),它给了我创建的第一个项目,但是 - > find($ id)没有用,我很困惑怎么做。
我将不胜感激任何帮助。感谢。
答案 0 :(得分:2)
您必须使用find()
仅通过主键获取数据,而不使用Project::join('groups', 'groups.project_id','=', 'project.id')->find($id)
等其他条件。在您的情况下,您应该使用first()
where()
条件来设置PK
例如:
$project = Project::join('groups', 'groups.project_id','=', 'project.id')->where('project.id',$id)->first()
,其中 id 是您的PK。
答案 1 :(得分:0)
Laraval可以处理many to many关系。 如果您构建这样的模型和迁移,则可以使用Model :: find($ id)
如果您需要有关代码的帮助,我会附上我的答案。