Давайте рассмотрим, что у меня есть модель с именем Sportman
и еще одна Sport
, которые связаны через таблицу pivot
: отношение многие ко многим .
Пример кодаза их миграции.
# Sportmans migration
Schema::create('sportsmans', function (Blueprint $table) {
$table->increments('id');
$table->string('firstname');
$table->string('lastname');
});
# Sports migration
Schema::create('sports', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('description');
});
Вот их отношения в моделях:
# Defining association in Sportsman model
public function sports(){
return $this->belongsToMany( Sport::class, 'sportsman_has_sports', 'person_id', 'sport_id' );
}
# Defining association in Sports model
public function sportsman(){
return $this->belongsToMany( Sportsman::class );
}
Как я могу использовать Laravel с Eloquent, чтобы получить sportsman
, который играет:
- Только "Футбол"
- Коробка или "Плавание"
- Обе "Теннис и Баскетбол
Вот что я пытался сделать для вопроса 2:
Sportsman::with(['sports:person_id,id,name'->whereHas('sports', function ($query) {
$query->whereIn('name', ['Box', 'Swimming'] );
});
Самым сложным является вопрос 3