cari

Rumah  >  Soal Jawab  >  teks badan

php - Bagaimana untuk menyambung berbilang pertanyaan bersyarat kabur dalam laravel?

Andaikan sekarang saya menerima tatasusunan borang dari hujung hadapan:
$input = $request->input();
mengandungi 4 nilai: e-mel, nama, umur, jantina Kini jadual data perlu disoal berdasarkan nilai yang dimasukkan oleh pengguna , ia akan menjadi pertanyaan kabur, jika umur dan jantina dimasukkan, pertanyaan yang tepat akan dilakukan
Tetapi di sinilah masalahnya. , atau mungkin 4. Kemudian apabila saya menggunakan pembina pertanyaan, adalah mustahil untuk menilai sama ada setiap nilai wujud, dan kemudian menulis pembina Lagipun, pertanyaan kabur dan pertanyaan tepat ditulis secara berbeza, dan sebagai contoh, sekarang saya mempunyai dua medan (e-mel dan nama) memerlukan pertanyaan kabur Laravel untuk pertanyaan kabur ditulis seperti ini:
->di mana('e-mel', 'LIKE', $input['email'])
Kemudian saya perlu menentukan sama ada e-mel dan nama wujud dalam program, dan kemudian menyambung pembina pertanyaan?
Ideanya ialah:

1.email存在,姓名不存在
->where('email', 'LIKE', $input['email'])
2.email不存在,姓名存在
->where('name', 'LIKE', $input['name'])
3.都存在
->where('email', 'LIKE', $input['email'])->->where('name', 'LIKE', $input['name'])

Jumlah kod terlalu besar Jika saya mempunyai sepuluh medan untuk pertanyaan kabur, saya tidak boleh menggunakan pembina sama sekali.
Bolehkah anda beritahu saya jika ada cara lain, seperti:

if($input['email']) $where['email'] = $input['email']
if($input['name'])  $where['name']  = $input['name']

Kemudian gunakan:
->where( 'LIKE', $where), supaya saya memasukkan semua situasi yang mungkin wujud atau tidak dalam satu baris
Kaedah penulisan lain disyorkan di Internet:
$where['email'] = ['like', $input['email']], tetapi laravel5.1 saya tidak boleh digunakan.
Adakah anda mempunyai sebarang kaedah yang baik untuk menyelesaikan pertanyaan kabur berbilang keadaan dan pertanyaan bukan kabur?

ringa_leeringa_lee2823 hari yang lalu1751

membalas semua(5)saya akan balas

  • PHP中文网

    PHP中文网2017-05-16 12:04:58

    Laravel boleh melepasi fungsi tanpa nama di mana.

    Anda boleh menilai dalam fungsi tanpa nama ini.

    Sebagai contoh, seperti ini

    where(function ($query) use ($request) {
        $request->input('email') && $query->where('email', $request->input('email'));
        $request->input('name') && $query->where('name', $request->input('name'));
    })

    Dengan cara ini anda boleh membuat pertimbangan yang sesuai tanpa memusnahkan struktur pembina.

    balas
    0
  • 某草草

    某草草2017-05-16 12:04:58

    Saya tidak pernah menggunakan 5.1, tetapi 5.4 mempunyai kaedah bila, contoh:

    $query->when($name, function($query) use ($name){
        $query->where('name', 'like', '%' . $name . '%');
    });

    Maksudnya apabila $name tidak kosong, fungsi berikut

    akan dilaksanakan.

    Sila semak sama ada terdapat kaedah yang sama dalam 5.1

    balas
    0
  • 滿天的星座

    滿天的星座2017-05-16 12:04:58

    Bercakap tentang pembina pertanyaanwhere()方法是返回$this--supaya anda boleh menulisnya berturut-turut, tetapi ia tidak bermakna anda perlu menulisnya berturut-turut!

    Apabila terdapat banyak medan, bolehkah menulis gelung for?:

    
    $query = XXXModel::query();
    
    for ($field in ['name', 'email', "... 你相加什么字段加什么字段"]){
        if ($fieldValue = $request->input($field)){
            $query->where($field, 'LIKE', "%$fieldValue%");
        }
    }
    
    // 继续添加where条件,或者查询数据...
    

    balas
    0
  • 高洛峰

    高洛峰2017-05-16 12:04:58

    $query = DB::table($table_name);
    foreach ($conditions as $condition) {
        $query->where($condition, 'LIKE' $input($ocndition);
    }
    $query->get();

    balas
    0
  • 大家讲道理

    大家讲道理2017-05-16 12:04:58

    Anda mesti membuat pertimbangan, sama ada anda membuat penghakiman atau rangka kerja membuat penghakiman. Jika terdapat 10 medan untuk pertanyaan fuzzy, bolehkah mysql anda mengendalikannya?

    balas
    0
  • Batalbalas