如何让一个外键的数据只有一次laravel?

问题描述 投票:0回答:1

我想获取发送到特定团队的所有消息的数据,但我想只有一个外键的第一个实例,并且不想再重复了。例如,我要一个特定团队的ID只有第一排不想再重复同样与外键的行。只想列出具有独特foriegn密钥数据。下面的查询工作得很好,但它的重复TEAM_ID但我想一个团队的ID只有一次。这是查询。

  $pages = DB::table('teams')
    ->leftJoin('conversation_teams', 'teams.id', '=', 'conversation_teams.team_id')
    ->select('teams.name','conversation_teams.id','conversation_teams.message_body','conversation_teams.sender_user_id','conversation_teams.receiver_user_id','conversation_teams.created_at','conversation_teams.team_id')
    ->whereIn('conversation_teams.team_id',$my_teams)
    ->orderBy('conversation_teams.created_at', 'DESC')
    ->paginate(12);

这是表结构。 table of conversation_teams

enter image description here

mysql database laravel
1个回答
0
投票

用最小的简单组()会帮助你,但是,你必须在选择列表非聚合列,不会让查询执行。

解决方法是禁用的MySQL only_full_group_by option

但是,如果不这样做我会采取增加与子查询联接的一个长镜头:

$pages = DB::table('teams')
    ->leftJoin('conversation_teams', 'teams.id', '=', 'conversation_teams.team_id')
    ->join(DB::raw("(SELECT 
      MIN(id) as d_id, team_id as t_id
      FROM conversation_teams
      GROUP BY t_id
      ) as ct_derived"),function($join){
        $join->on("conversation_teams.id","=","ct_derived.d_id");
    })
    ->select('teams.name','conversation_teams.id','conversation_teams.message_body','conversation_teams.sender_user_id','conversation_teams.receiver_user_id','conversation_teams.created_at','conversation_teams.team_id')
    ->whereIn('conversation_teams.team_id',$my_teams)
    ->orderBy('conversation_teams.created_at', 'DESC')
    ->paginate(12);

我没有从运行查询,但是我试图做到这一点,我过滤conversation_teams结果,并采取每队的第一个记录这是你想要什么,如果我的理解是正确的表格。

© www.soinside.com 2019 - 2024. All rights reserved.