在laravel中过滤重复的外键

时间:2016-07-09 23:38:01

标签: php mysql sql laravel laravel-5

我有这种数据

Bag b = Bag.Parse(bagTableValue);

no.BA是外键,id是我的主键,在模型中我只是使用这个belongsTo

RegEx

在我的控制器中

id|no.BA|name|value|date
1 |22   |test|11111|30/11/2015
2 |22   |test|11144|31/12/2015
3 |34   |tttt|24455|31/12/2015
4 |44   |kkkk|33332|30/11/2015
5 |44   |kkkk|44433|31/12/2015
6 |44   |kkkk|67677|31/01/2016

但我打算展示的是

 public function cuprimer(){
    return $this->belongsTo('App\Models\Cuprimer','cu','id');
 }

因此,我不需要复制第22号和第44号,只能根据日期显示最新版本。

怎么做?

更新

感谢终点指向类似的问题 in here但如何以雄辩的方式做到这一点?自解决方案使用

$datas = PerkembanganCU::with('cuprimer')->orderBy('cu','asc')->get();

在laravel中是否有任何雄辩的方法来改善belogsTo与最大日期?

UPDATE2: 因此,在做了一些研究之后我才到达这一点

id|no.BA|name|value|date
2 |22   |test|11144|31/12/2015
3 |34   |tttt|24455|31/12/2015
6 |44   |kkkk|67677|31/01/2016

它只显示no.BA中的每一个只有一个,但它还没有完成..因为它只显示我输入/保存到数据库中的每个no.BA中的第一个.. 。我仍然需要指定只显示最新的或在这种情况下显示最大日期......

所以我几乎在那里,但还没到那里......

UPDATE3

所以几天前,我找到了解决方案,并将其添加到答案部分。

  $rows = DB::table('papers')
               ->select(DB::raw('id, max(paper_update) as year,user_id'))
               ->groupBy('user_id')
               //->orderBy('paper_update', 'desc')
               ->get();

但今天在我尝试添加实际数据后,我发现此代码中存在一个重大缺陷。比如说数据上升...它将显示的只是具有最大日期的那个

$datas = Article::with('category')->groupby('no.BA')-get();

所以请任何有sql查询专业知识的人...请帮助我..我坚持在stackoverflow中声称解决方案工作的每个问题......但在我的情况下它不按我想要的方式工作...

1 个答案:

答案 0 :(得分:0)

我相信会做这项工作。

use App\Models\Cuprimer;
$rows = Cuprimer::groupBy('no.BA')
    ->havingRaw('COUNT(*) > 1')
    ->get();

如果这不起作用,请尝试使用havingRaw()删除该行。