Merhaba bunu nasıl yapıyorsunuz ?
Ben üç adet sağlıklı çalışabilecek yöntem buldum. Ama verim alamadım. Soruna kolay kaçabiliyorlar. Deneme yanılma ile tüketiyor insanı.
Duruma göre farklılık gösteriyor.
Pivotları formdan gelen veriler ile eşitleyip tek bir dizin haline getirip basmak. Fakat bazen tek kullanıcı içinde birkaç veri gerekiyor. Farklı modeller gerekiyor.
Burada ki risk listeletilen her item için tüm filtrelerin geçerli olacak olması. Yani bölge filtresi varsa diğerleri diğer filtrelere uysa dahi gelmemeli.. İf else ile bir yere kadar yapmak mümkün ama tabi böyle de çin işkencesinden farksız.
Yerli, yabancı kaynakları araştırsam da dişe dokunur birşeye rastlayamadım bu konuda da.
// Düz php mantığı
function search_donar($_POST) {
$by_name = $_POST['by_name'];
$by_sex = $_POST['by_sex'];
$by_group = $_POST['by_group'];
$by_level = $_POST['by_level'];
$query = "SELECT * FROM donar";
$conditions = array();
if(! empty($by_name)) {
$conditions[] = "name='$by_name'";
}
if(! empty($by_sex)) {
$conditions[] = "sex='$by_sex'";
}
if(! empty($by_group)) {
$conditions[] = "blood_group='$by_group'";
}
if(! empty($by_level)) {
$conditions[] = "e_level='$by_level'";
}
$sql = $query;
if (count($conditions) > 0) {
$sql .= " WHERE " . implode(' AND ', $conditions);
}
$result = mysql_query($sql);
return $result;
}
// Laravel ile olanı
$data['countries'] = Countries::orderBy('name', 'ASC')->where('id', '!=', '231')->get();
$data['categories'] = categories::get();
$query = UserProfiles::join('users', 'users_profiles.user_id', '=', 'users.id');
$query->join('countries','users_profiles.country','=','countries.id');
$query->join('states','users_profiles.state','=','states.id');
if(!empty($request->category)){
$query->where('users.member_type',$request->category);
}
if(!empty($request->country)){
$query->where('users_profiles.country', $request->country);
}
if(!empty($request->state)){
$query->where('users_profiles.state', $request->state);
}
if(!empty($request->type)){
$query->where('users_profiles.type_surrogacy', $request->type);
}
if(!empty($request->city)){
$query->where('users_profiles.city', $request->city);
}
if(!empty($request->willing_to)){
$query->where('users_profiles.willing_to_assist', $request->willing_to);
}
if(!empty($request->languages)){
$query->where('users_profiles.languages', $request->languages);
}
if(!empty($request->country)){
$query->where('users_profiles.country', $request->country);
}
if(!empty($request->education)){
$query->where('users_profiles.education', $request->education);
}
if(!empty($request->smoker)){
$query->where('users_profiles.smoker', $request->smoker);
}
if(!empty($request->hair_color)){
$query->where('users_profiles.hair_color', $request->hair_color);
}
if(!empty($request->eye_color)){
$query->where('users_profiles.eye_color', $request->eye_color);
}
if(!empty($request->marital_status)){
$query->where('users_profiles.marital_status', $request->marital_status);
}
$query->select('users.*','countries.name as country','states.name as state');
$data['search_results'] = $query->paginate(15);
if ($request->has('course_name')) {
$institute->whereHas('courses', function ($query) use ($request) {
$query->where('courses.course_name', $request->input('course_name'));
})
->with('courses);
}
Yine de dediğim sebeplerden ötürü aşağıdakini daha mantıklı buldum. Diğerlerinde birinden biri sarpa sarıyor. Mantığını anlamadığım şeylerden biri de bu.
DB::join()
ile düz php mantığı ile giden de var.
foreach ( $results as $result) {
if(
$result->bolge == $bolge &&
$mekan == Mekan::find($result->id) &&
$zaman == Zaman::find($result->id) &&
$hizmet == $hizmet::find($result->id) &&
...
){
if($request->resimli == 1){
if($result->resim)
array_push($son,$result);
}elseif (...