Laravel 5在哪里有链接和/或哪里

时间:2015-04-09 13:31:08

标签: php mysql laravel eloquent laravel-5

尝试查询具有较低级别关系(协议)的模型,我无法进行链接工作。我尝试了下面的三种方法(第二种方法让我99%的方式,但它错过了其中一个结果 - 一个不活跃的设备"状态"和一个"无效"协议(应该省略)。我做错了什么?

每件设备都必须是“活跃的”#34;并且有一个积极的现有协议(一个有效的协议是"活跃","到期时取消"或"未签名")。

    $thing = Equipment::wherehas('agreement', function($q)use($month)
    {
        $q->where('equipment.status', '=', 'Active')
          ->where('maintenance_months', 'like', '%'.$month.'%')
          ->where('status', '=', 'Active')
          ->orWhere('status', '=', 'Unsigned')
          ->orWhere('status', '=', 'Cancel on expiry');
    })->Get();

    $thing = Equipment::wherehas('agreement', function($q)use($month)
    {
        $q->where('status', '=', 'Active')
          ->orWhere(function($q2)use($month)
          {
                $q2->where('equipment.status', '=', 'Active')
                   ->where('maintenance_months', 'like', '%'.$month.'%');
          })
          ->where('status', '=', 'Unsigned')
          ->orWhere(function($q3)use($month)
          {
                $q3->where('equipment.status', '=', 'Active')
                   ->where('maintenance_months', 'like', '%'.$month.'%');
          })
          ->where('status', '=', 'Cancel on expiry')
          ->orWhere(function($q4)use($month)
          {
                $q4->where('equipment.status', '=', 'Active')
                   ->where('maintenance_months', 'like', '%'.$month.'%');
          });
    })->Get();      

    $thing = Equipment::wherehas('agreement', function($q)use($month)
    {
        $q->where('status', '=', 'Active')
          ->where('equipment.status', '=', 'Active')
          ->where('maintenance_months', 'like', '%'.$month.'%')
          ->orWhere('status', '=', 'Unsigned')
          ->where('equipment.status', '=', 'Active')
          ->where('maintenance_months', 'like', '%'.$month.'%')
          ->orWhere('status', '=', 'Cancel on expiry')
          ->where('equipment.status', '=', 'Active')
          ->where('maintenance_months', 'like', '%'.$month.'%');
    })->get();

1 个答案:

答案 0 :(得分:3)

我不太明白为什么equipment.status一遍又一遍地过滤同一个东西,如果我不理解,下面的代码可能就是你要找的结果。

$thing = Equipment::whereHas('agreement', function($q)use($month)
{
    $q->where('maintenance_months', 'like', '%'.$month.'%')
      ->whereIn('status',['Unsigned','Active','Cancel on Expiry'])
})->where('status','Active')->get();