Tham gia nhiều lần trong Eloquent từ phạm vi địa phương

Aug 16 2020

Có câu hỏi liên quan đến Eloquent và chức năng phạm vi:

Giả sử hai phạm vi:

class Result extends Model {

   public function scopeIsRace($query) { return $query
            ->join('sessions', 'sessions.id', '=', 'results.session_id')
            ->where('sessions.type', 10)
   }

   public function scopeIsOfficial($query) { return $query
            ->join('sessions', 'sessions.id', '=', 'results.session_id')
            ->join('events', 'events.id', '=', 'sessions.event_id')
            ->where('events.regular_event', 1);
   }
}

Việc gọi cả hai trong số chúng thực hiện hai phép nối các phiên và truy vấn kết quả trông giống như thế này (không hoạt động)

select * from `results` inner join `sessions` on `sessions`.`id` = `results`.`session_id` inner join `sessions` on `sessions`.`id` = `results`.`session_id` inner join `events` on `events`.`id` = `sessions`.`event_id` where `driver_id` = 24 and (`sessions`.`type` = 10 or `sessions`.`type` = 11) and `events`.`regular_event` = 1

Làm cách nào để ngăn chặn kết hợp kép trên các phiên?

Trả lời

1 Siggi Aug 16 2020 at 15:51

Cảm ơn bạn rất nhiều @Nima. Hoàn toàn quên về một whereHas nâng cao. Đã sử dụng một cấu trúc sẽ lấy cái này từ câu hỏi đề xuất của bạn và nó hoạt động hoàn toàn tốt:

public function scopeIsRace($query) { return $query->whereHas('session', function($query){ $query->where('type', 10);
    });
}

public function scopeIsOfficial($query) { return $query->whereHas('session', function($query) { return $query->whereHas('event', function($query2) { $query2->where('regular_event', 1);
        });
    });
}