【发布时间】:2014-07-08 20:31:55
【问题描述】:
我有一个项目(论文)列表,并希望显示具有特定区域的所有论文。 现在我希望用户能够根据不同的属性过滤论文列表。
这些是表格/模型
Papers
id
name
author_id
year
paperQuality
userRating
Authors
id
name
birthDate
Paper_areas
id
paper_id
area_id
significance
Area
id
name
creationYear
我正在努力保持 Eloquent 的相关性。用户应该能够在papers.year、papers.paperQuality、papers.Rating、paper_areas_significance、area.creationYear之后进行过滤
这就是我现在所拥有的
$paper_areas_query = Paper_areas::join('areas', function($join){
$join->on('areas.id', '=', 'paper_areas.area_id')
->where('areas.creationYear', '=', 2011);
});
$paper_areas_query->join('papers', function($join){
$join->on('papers.id', '=', 'paper_areas.paper_id')
->where('papers.year', '=', 2011)
->where('papers.paperQuality', '=', 4)
->where('papers.userRating', '=', 5);
});
$paper_areas_query->join('authors', function($join){
$join->on('authors.id', '=', 'papers.author_id');
});
$paper_areas_query->select('paper_areas.id', 'paper_areas.paper_id', 'paper_areas.area_id');
$paper_areas_query->orderBy('authors.name','asc');
$paper_areas_query->orderBy('papers.title','asc');
$paper_areas_query->groupBy('papers.id');
现在只显示 2011 年的论文,但我遇到了 2 个问题
如何使用从 url 获取的参数来替换年份?
如何以我拥有 Paper_areas 集合的方式过滤结果集?查看上面的代码,它似乎不像其他代码那样“好”。
【问题讨论】:
-
Paper_areas 表中的
topic_id列是Areas表的键吗? -
是的,对不起 - 我已经重命名了
标签: php join laravel-4 eloquent