我有两个表,Project和Projectnote
项目和项目说明之间存在一对多的关系。
我希望能够列出我的项目,并根据created_at日期选择最新的项目说明。
这可以在Eloquent中做到,我无法弄明白。
感谢您的帮助!
编辑:到目前为止,我有一个连接两个表的基本查询(下面)。但是,这只选择存在注释的项目,并且我得到多个行,每个项目有几个注释。
$projects = Project::join('projectnotes', 'projectnotes.project_id', '=', 'projects.id')
->select(array('projects.*', 'projectnotes.note as note'))
->get();
答案 0 :(得分:1)
您可以在表格中加入最新值:
->join('t1', function($join) {
$join->on('t1.t2_id', '=', 't2.id')
->on('t1.id', '=', DB::raw("(select max(id) from t1 WHERE t1.t2_id = t2.id)"));
如果您还想加入t1没有值的地方,请使用leftJoin。在你的情况下,这将是这样的:
$projects = Project::leftJoin('projectnotes', function($join) {
$join->on('projectnotes.project_id', '=', 'projects.id')
->on('projectnotes.id', '=', DB::raw("(SELECT max(id) from projectnotes WHERE projectnotes.project_id = projects.id)"));
})
->select(array('projects.*', 'projectnotes.note as note'))
答案 1 :(得分:0)
在项目模型中,使notes
关系函数看起来像:
public function notes() {
return $this->hasMany('Note');
}
然后,您可以通过链接orderBy
和first
来获取包含主键1的项目的最新注释:
Project::find(1)->notes()->orderBy('created_at', 'desc')->first();
另外,您的记事表是否被称为'注意'或者'笔记'? (保持Laravel风格,它应该在我的代码中以单数形式命名)