У меня есть $ table , поле is_contain которого равно 1 или 0. У меня есть несколько записей Obj с полями active и is_contain.
Первый сценарий:
$ table-> is_contain = 1
Доступны записи Obj:
- 'id' = 1 'active' = 1 и 'is_contain' = 0
- 'id' = 2 'active' = 1 и 'is_contain' = 1
должны возвращать запись Obj, идентификатор которой = 2
Второй сценарий:
$ table-> is_contain = 1
Доступны записи Obj:
- 'id' = 1 'active' = 1 и 'is_contain' = 0
должны вернуть запись Obj, id = 1
Если $ table-> is_contain = 1 и имеет запись Obj, которая 'is_contain' = 1, затем возвращает эту конкретную запись Obj, которая 'is_contain' = 1, в противном случае возвращает запись, которая 'is_contain' = 0
Сначала Я использовал -> get () как ниже вместо -> first (), но -> get () вернет все две записи Obj, что не то, что я хочу, так как я должен пройти через эти две записи и получить одну с 'is_contain' = 1.
$obj=Obj::whereActive(1)->where(function($query)use($table){
if($table->is_contain){
$query->where('is_contain',1)->orWhere('is_contain',0);
}
})
->get();
Теперь я разделил на две, потому что если использовать -> first (), он всегда будет возвращать Первая коллекция, которой иногда нравится этот пример, поле 'is_contain' записи Obj не равно 1.
$obj=Obj::whereActive(1)->where(function($query)use($table){
if($table->is_contain){
$query->where('is_contain',1);
}
})
->first();
if($obj==null&&$table->is_contain){
$obj=Obj::whereActive(1)->first();
}
Есть ли способ объединить эти два запроса в один?