我有一个在laravel和mongodb创建的项目。我正在使用一个包来连接到mongodb“https://github.com/jenssegers/laravel-mongodb”。我有一个表格列表。在此表列表中,有一个搜索数据的文本框。为此,我使用喜欢功能。我在文档中遵循相同但不工作。当我搜索 invoice_number 时,数据变空。但是当我搜索床时,数据变得越来越完美。请指正。
$bookings = Booking::select('invoice_number', 'temp_user_id', 'user', 'checkin_from', 'reserve_to', 'beds', 'dormitory', 'sleeps', 'status', 'payment_status', 'payment_type', 'total_prepayment_amount', 'txid')
->where('is_delete', 0)
->where('invoice_number', 'like', "%{$search}%")
->orWhere('beds', 'like', "%{$search}%")
->skip($start)
->take($limit)
->orderBy($order, $dir)
->get();
答案 0 :(得分:1)
您的查询中的WHERE
语句会转换为:
WHERE [cond_1] AND [cond_2] OR [cond_3]
我怀疑这是你需要的条件。我想说你想要这个:
WHERE [cond_1] AND ([cond_2] OR [cond_3])
- 注意括号。
要实现此目的,您需要在Builder查询中使用闭包。试试这个:
$bookings = Booking::select('invoice_number', 'temp_user_id', 'user', 'checkin_from', 'reserve_to', 'beds', 'dormitory', 'sleeps', 'status', 'payment_status', 'payment_type', 'total_prepayment_amount', 'txid')
->where('is_delete', 0)
->where(function($query) use ($search) { /* That's the closure */
$query->where('invoice_number', 'like', "%{$search}%")
->orWhere('beds', 'like', "%{$search}%");
})
->skip($start)
->take($limit)
->orderBy($order, $dir)
->get();
来自文档的 example 。