我有 $ table ,其中'is_contain'字段为1或0。我有几条Obj记录,其中包含'active'和'is_contain'字段。>
第一种情况:
$ table-> is_contain = 1
可用的Obj记录:
- 'id'= 1'active'= 1和'is_contain'= 0
- 'id'= 2'活动'= 1和'is_contain'= 1
应返回id = 2的Obj记录
第二种情况:
$ table-> is_contain = 1
可用的Obj记录:
- 'id'= 1'活动'= 1和'is_contain'= 0
应返回id = 1的Obj记录
如果 $ table-> is_contain = 1 并具有'is_contain'= 1的Obj记录,则返回此特定的'is_contain'= 1的Obj记录,否则返回'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(),它将始终返回第一个集合,有时像此示例一样,Obj记录的“ is_contain”字段不是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();
}
有什么办法可以将这两个查询合并为一个?
答案 0 :(得分:1)
只需按照is_contain
字段的顺序进行排序,然后排第一行:
$obj = Obj::whereActive(1);
if ($table->is_contain) {
$obj = $obj->orderBy('is_contain', 'DESC')->first();
}