Mathieu Mourareau
Mathieu Mourareau

Reputation: 1220

database design eloquent problem with query

I need to create an app who manage soccer sheets

I have actually a table who store the match with both teams

match :
-id
-dt_math
-club_home_id
-club_visitor_id

each team have a sheet to create the list of players.

So what i did, i created table match_sheet to store the both sheets from the teams.

match_sheet :
-id
-match_id

to store the players in each sheets i created the table match_sheet_player

match_sheet_player:
-id
-match_sheet_id
-player_id

Now i need to display only the matchs who have the both sheets in my view. and i don't know how to achieve that.

The first query that i made is that :

  $matchs_sheets = MatchSheet::all();

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

But this return my the match even if there is one sheet but not both sheets. i really need to show the match onyl if there is the two sheets.

Update :

here my data for math_sheet there is two records with 1659. 1659 is the id of the match. so i would like to only show match 1659 and not 1649 because there is only one record for this match enter image description here

Upvotes: 0

Views: 43

Answers (1)

Joel Hinz
Joel Hinz

Reputation: 25414

Assuming your model relationships are set up correctly, you can ask Laravel to get the matches only if the related model has a count of at least 2, using has(). For instance:

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

Your relationship should be set up as e.g. this:

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

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

Docs here: https://laravel.com/docs/5.6/eloquent-relationships#one-to-many - I really recommend reading through them, they'll save you huge amounts of time eventually!

Upvotes: 1

Related Questions