Laravel得到不同条件相同的查询

时间:2019-01-31 04:45:30

标签: php laravel

我在下面查询:

$address = Address::where('id', $request->input('address_id'))->first();
$state = $address->state_id;

$mytime = Carbon::now();
$mytax = Tax::where('province_id', $state)
  ->where('validation', '=', 'active')
  ->where('valid_to', '>=', $mytime)
  ->first();

这只是检查我的税表,如果过期日期还没有达到尚未返回数据。它运行得很好,但问题是我有2个条件,并且此查询仅返回其中一个条件

条件

  1. 基于时间的税收(上面的查询)
  2. 不依赖日期的永久税(我还没有的那一部分)

逻辑

  1. 根据province_id查找税款(我的查询的第一部分)
  2. 如果1号通过,请检查validation列是否设置为active 手段是基于时间的,需要->where('valid_to', '>=', $mytime) 如果if设置为inactive,则它不是基于时间的,应该始终 返回的数据(如果有在数据库中的任何)

您知道在实际进行日期验证之前如何检查validation列值吗?

2 个答案:

答案 0 :(得分:0)

我假设验证字段可以采用两个值。 “有效”或“无效”。

此查询将检查两件事。如果'validation'为'inactive',则'valid_to'大于今天。

data have;
length string $200.;
infile datalines;
input string & $ ;
datalines;
this is cool and carbapenmase producing or  wow so nice
this is wow confirmed carbapenamase confirmed hello
now this positive for modified hodge test and later 
cool is my name not carbapenemase producing" or "the modified hodge hello
wow and wow previous possible carbapenamase producing hello
 Mr cool is hello
;


 data want;
  set have;
    where (string contains "carbapenmase producing" or
     string contains "carbapenamase confirmed")
   and  not (string contains "not carbapenemase producing" or 
   string contains "possible carbapenamase producing");
  run;

答案 1 :(得分:0)

我想我了解您正在尝试做什么。但是,根据您提出的逻辑,我认为问题不是查询问题,而是架构调整-您自己说,您有两个不同的条件。而且,我认为您有两个不同的查询;一个用于一个活动记录(->first()),另一个用于所有非活动记录(->get())。

您仍然可以只运行一个数据库请求,但是我认为您需要将该逻辑分离为针对单个数据库请求的条件语句:

$taxes = Tax::where('province_id', $state)->get();

现在您拥有该州的税费,请在集合上运行查询以查看是否需要提取无效者:

$myTax = $taxes->where('validation', '=', 'active')
         ->where('valid_to', '>=', $mytime)
         ->first();

然后根据您的原始需求来定条件:

if(!isset($myTax)){
    $myTax(es?) = $taxes->where('validation', '=', 'inactive);

这可能会给您带来不止一个的麻烦,因此您必须处理first()与集合之间的区别,但这将是解决问题的一种方法。