У меня сложный запрос, который зависит от моих параметров, я вам все объясню:
Вот моя структура таблиц:
licencies :
-id
-lb_name
-type_licence_id
-valid_licence_id
licencies_medias :
-id
-licencie_id
-file path
Я фактически сделал запрос, который возвращает коллекцию лицензий с двумя или более файлами (licencies_medias)
$licencies = $query->whereIn('type_licence_id' , [1 , 2 , 3 , 4 , 5])
->whereIn('statut_licence_id', ['1' , '4'])
->where('valid_licence_id', '1')
->has('medias', '>=', 2)
->orderBy('lb_name' , 'asc')
->paginate(10);
Моя проблема в том, что количество носителей зависит от type_licence_id
:
Например, лицензиату с type_licence_id = 1 необходимо иметь 3 licencies_medias (файлы)
лицензиату с type_licence_id = 2 необходимо иметь 4 licencies_medias (файлы)
Мне нужно создать запрос, который может проверить эти условия и отобразить все
лицензии, которые имеют правильное количество файлов для права
type_licence_id и отображать их вместе
На самом деле в моей модели у меня есть:
// on licencies model
public function medias()
{
return $this->hasMany(LicenciesMedias::class , 'licencie_id');
}
// on licenciesMedia model
public function licencie()
{
return $this->belongsTo(Licencies::class , 'licencie_id);
}
РЕДАКТИРОВАТЬ, похоже, он работает с методом сбора слияний, только еще одна проблема, когда я пытаюсь отфильтровать запрос, я не получаю результата: здесь полный контроллер:
public function licenceToValidFromFede(Request $request)
{
// $licencies_to_search = Licencies::select('structure_id', 'num_licence', 'lb_nom' , 'lb_prenom' , 'id')
// ->whereIn('type_licence_id' , [1 , 2 , 3 , 4 , 5])
// ->whereIn('statut_licence_id', ['1' , '4'])
// ->where('valid_licence_id', '1')
// ->get()
// ->mapWithKeys(function($i) {
// return [$i->id => $i->num_licence.' - '.$i->lb_nom. ' ' .$i->lb_prenom. ' - ' .$i->structure->num_structure. ' ' .$i->structure->nom_structure];
// });
$type_licence = Type_licence::pluck('lb_type' , 'id');
$activite = ActiviteLicencie::pluck('lb_activite' , 'id');
$structure = Structure::select('num_structure', 'nom_structure' , 'id')
->get()
->mapWithKeys(function($i) {
return [$i->id => $i->num_structure.' - '.$i->nom_structure];
});
$catg_licence = CatgLicence::pluck('lb_catg_lic' , 'id');
$query = Licencies::query();
$filters = [
'structure' => 'structure_id',
'type_licence' => 'type_licence_id',
'activite_licencie' => 'activite_licencie_id',
'assurance' => 'lb_assurance_etat',
'catg_licence' => 'catg_licence_id',
];
foreach ($filters as $key => $column) {
if ($request->has($key)) {
$query->where($column, $request->{$key});
}
}
// $licencies = $query->whereIn('type_licence_id' , [1 , 2 , 3 , 4 , 5])
// ->whereIn('statut_licence_id', ['1' , '4'])
// ->where('valid_licence_id', '1')
// ->has('medias', '=', 2)
// ->orderBy('lb_nom' , 'asc')
// ->paginate(10);
$licencies_id_1 = $query->where('type_licence_id' , 1)
->whereIn('statut_licence_id', ['1' , '4'])
->where('valid_licence_id', '1')
->has('medias', '>=', 2)
->get();
$licencies_id_2 = $query->where('type_licence_id' , 2)
->whereIn('statut_licence_id', ['1' , '4'])
->where('valid_licence_id', '1')
->has('medias', '>=', 3)
->get();
$licencies_id_3 = $query->where('type_licence_id' , 3)
->whereIn('statut_licence_id', ['1' , '4'])
->where('valid_licence_id', '1')
->has('medias', '>=', 3)
->get();
$licencies_id_4 = $query->where('type_licence_id' , 4)
->whereIn('statut_licence_id', ['1' , '4'])
->where('valid_licence_id', '1')
->has('medias', '>=', 3)
->get();
$licencies_id_5 = $query->where('type_licence_id' , 5)
->whereIn('statut_licence_id', ['1' , '4'])
->where('valid_licence_id', '1')
->has('medias', '>=', 3)
->get();
$all_licencies = $licencies_id_1->merge($licencies_id_2);
$all_licencies = $all_licencies->merge($licencies_id_3);
$all_licencies = $all_licencies->merge($licencies_id_4);
$all_licencies = $all_licencies->merge($licencies_id_5);
$licencies = $all_licencies;
$perPage = 15;
$paginator = new Paginator($licencies, $perPage);
return view('licencie/validerFromFede' , compact('licencies' ,'licencies_to_search' , 'type_licence' , 'activite' , 'structure' , 'catg_licence' ,'paginator'));
}