php - Laravel Eloquent,返回两个条件都为 True 的行

标签 php mysql laravel eloquent

我有一个与属性表相连的周表,周表如下所示:-

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 的行,因为只有一周可用。

我尝试了各种方法,但要么一无所获,要么总是返回第一行、第二行和第四行。

我认为这很接近,但它仍然缺少一些东西,因为它正在寻找 <= 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' 按 PropID 分组有计数(*)= 2

最佳答案

这将使您的结果仅作为属性 1:

$weeks = Property::whereHas('Week', function ($q) {
    $q->where(function ($sub) {
        $sub->whereIn('WeekDate', array('2015-07-04', '2015-07-11'));
        $sub->where('Available', '=', 'y');
    });
    $q->groupBy('property_id');
    $q->having('count(*)', '=', '2');
})->get();

关于php - Laravel Eloquent,返回两个条件都为 True 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31183102/

相关文章:

php - 防止直接访问 php 页面,只有在重定向时才能访问

php - 即使用户通过单击“后退”注销后,如何避免进入登录 session ?

mysql - 如何根据相同的id从2个不同的表中选择不同的内容

php - 找不到两位数的月份 Laravel 中的 Carbon 中缺少数据

php - Laravel 4.1 Eloquent 使用 "where"和 "with"来过滤相关的 MySQL 表

Laravel Scout,使用 where 子句搜索

php - Web 应用程序开发的优化策略

php - CodeIgniter IE 没有正确存储 session

php - 使用 laravel mysql 将列的数据转换为多列(将列的数据转换为特定列)

php - 使用功能验证管理员权限失败