php - Bagaimana untuk menyambung berbilang pertanyaan bersyarat kabur dalam laravel?
ringa_lee
ringa_lee 2017-05-16 12:02:58
0
5
1750

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_lee
ringa_lee

ringa_lee

membalas semua(5)
洪涛

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.

某草草

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

滿天的星座

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条件,或者查询数据...
小葫芦
$query = DB::table($table_name);
foreach ($conditions as $condition) {
    $query->where($condition, 'LIKE' $input($ocndition);
}
$query->get();
大家讲道理

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?

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan