Php 组合这两个查询并返回最匹配的查询

Php 组合这两个查询并返回最匹配的查询,php,laravel,eloquent,model,Php,Laravel,Eloquent,Model,我有$table,它的“包含”字段为1或0。我有几个Obj记录有“活动”和“包含”字段 第一个场景: $table->is_contain=1 可获得的Obj记录: 'id'=1'活动'=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

我有$table,它的“包含”字段为1或0。我有几个Obj记录有“活动”和“包含”字段

第一个场景:

$table->is_contain=1

可获得的Obj记录:

  • 'id'=1'活动'=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且有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(),它将始终返回第一个集合,有时与本例类似,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();
}

有没有办法将这两个查询合并为一个?

只需按
排序即可包含
字段,并取第一行:

$obj=obj::wherective(1);
如果($table->is\u contain){
$obj=$obj->orderBy('is_contain','DESC')->first();
}

is\u contain字段为布尔值,orderBy不起作用it@unknownr u使用mysql作为驱动程序?@unknown mysql没有内置布尔类型。但是,它使用了TINYINT(1)。所以它仍然是integer.im使用sequel pro访问我的数据库。是的,它是锡的吗