数据库设计雄辩的查询问题

时间:2018-09-06 18:20:16

标签: database laravel eloquent

我需要创建一个管理足球表的应用程序

我实际上有一张桌子,存储着两支球队的比赛

match :
-id
-dt_math
-club_home_id
-club_visitor_id

每个团队都有一张表来创建球员列表。

所以我做了什么,我创建了表match_sheet来存储团队的两个表。

match_sheet :
-id
-match_id

为了将玩家存储在我创建的表match_sheet_player的每张纸上

match_sheet_player:
-id
-match_sheet_id
-player_id

现在,我只需要显示在我的视图中同时包含两个表的匹配项即可。而且我不知道该如何实现。

我进行的第一个查询是:

  $matchs_sheets = MatchSheet::all();

    $matchs = Match::whereIn('id', $matchs_sheets->pluck('match_id'))->orderByDesc('dt_match')->paginate(5);

但是即使有一张纸但没有两张纸,这也会返回我的比赛。如果有两张纸,我真的需要显示匹配的onyl。

更新:

这是我的math_sheet数据  有两个记录为1659。1659是匹配项的ID。所以我只想显示比赛1659,而不是1649,因为这场比赛只有一条记录 enter image description here

1 个答案:

答案 0 :(得分:1)

假设模型关系正确设置,则只有在相关模型的计数至少为2时,才可以使用has()要求Laravel获取匹配项。例如:

$matches = Match::whereIn('id', $ids)->has('matchSheet', '=', 2)...

您的关系应设置为例如这个:

// on Match model
public function matchSheets()
{
    return $this->hasMany(MatchSheet::class);
}

// on MatchSheet model
public function match()
{
    return $this->belongsTo(Match::class);
}

此处的文档:https://laravel.com/docs/5.6/eloquent-relationships#one-to-many-我真的建议您仔细阅读它们,它们最终将为您节省大量时间!