Laravel Eloquent,返回两个条件均为True的行

时间:2015-07-02 11:17:05

标签: php mysql laravel eloquent

我有一个Weeks表连接到属性表,Weeks表看起来像这样: -

PropID, WeekDate,    Available

1     , 2015-07-04,      Yes

1     , 2015-07-11,      Yes

1     , 2015-07-18,      No

2     , 2015-07-04,      Yes

2     , 2015-07-11,      No

2     , 2015-07-18,      No

我想选择第4和第11周都可用的属性。在上面的示例中,我想返回两行PropID 1,因为两者都可用,而且没有来自PropID 2的行,因为只有一周可用。

我尝试了各种各样的方法,但要么得到任何东西,要么总是返回第1行,第2行和第4行。

我认为这很接近,但它仍然缺少一些东西,因为它正在寻找< = AND> =

的日期
 $query = Property::whereHas('Week', function($q) use ($arrive)
            {
                $q->where(function($sub)
                {
                    $sub->where('WeekDate', '>=', '2015-07-04');
                    $sub->where('WeekDate', '<=', '2015-07-11');

                });
                $q->where('Available', '=', 'Yes');
            })
                ->get();

不确定这会有所帮助,但属性表只是

PropID, PropName

    1     , Property 1

    2     , Property 2

刚发现这个SQL有效。

SELECT PropID FROM tblweeks WHERE WeekDate IN('2015-07-04','2015-07-11')AND Available ='yes'GROUP BY PropID HAVING COUNT(*)= 2

5 个答案:

答案 0 :(得分:1)

这样,您的结果仅为属性1

 if(2 != 0 && typeof(Mine) === "object" && Mine == "Mine")

答案 1 :(得分:0)

我相信你不需要第二个嵌套查询。

$query = Property::whereHas('Week', function($q) use ($arrive)
{
  $q->where('WeekDate', '>=', '2015-07-04');
  $q->where('WeekDate', '<=', '2015-07-11');
  $q->where('Available', '=', 'Yes');
})
->get();

<击>

<强>更新

你有没有看过whereBetween

$query = Property::whereHas('Week', function($q) use ($arrive)
{
  $q->whereBetween('WeekDate', '2015-07-04', '2015-07-11');
  $q->where('Available', '=', 'Yes');
})
->get();

答案 2 :(得分:0)

我在您的查询中做了一些更改:

请检查此解决方案

$query = Property::whereHas('Week', function($q) use ($arrive)
{
  $q->where('WeekDate', '=', '2015-07-04');
  $q->orWhere('WeekDate', '=', '2015-07-11');
  $q->where('Available', '=', 'Yes');
})
->get();

这应该有效并将返回欲望输出

答案 3 :(得分:0)

有一些更改,查询可能正在逐个查询:

请检查此解决方案

$query = Property::whereHas('Week', function($q) use ($arrive)
{
  $q->where('WeekDate', '=', '2015-07-04');
  $q->orWhere('WeekDate', '=', '2015-07-11');
  $q->where('Available', '=', 'Yes');
  $q->group('WeekDate');
})
->get();

这应该有效并将返回欲望输出

答案 4 :(得分:0)

实际上你需要两个whereHas

 $query = Property::whereHas('Week', function($q) use ($arrive)
                  {
                      $q->where('WeekDate', '>=', '2015-07-04');
                      $q->where('Available', '=', 'Yes');
                  })
                  ->whereHas('Week', function($q) use ($arrive)
                  {
                      $q->where('WeekDate', '<=', '2015-07-11');
                      $q->where('Available', '=', 'Yes');
                  })
                  ->get();