【问题标题】:Codeigniter Reservation Function - Limit Reservations to 1 Hour a DayCodeigniter 预订功能 - 将预订限制为每天 1 小时
【发布时间】:2017-07-13 22:51:13
【问题描述】:

所以我有一个预订功能,用户可以每天预订篮球场。我想要的是验证他们将预订限制为每天一小时。我最初想出的是在数据库中搜索所有预订,其中预订者的用户名与会话用户名相同。如果行数超过或等于 1,那么它应该返回 false。这样做的问题是它会限制预订,但也会限制其他日期的预订。我想要的是,如果我今天预订,我今天不能再预订,但我可以预订明天。实现这个的正确逻辑是什么?

型号:

function check_maxhour_courtone()
{
    $query = $this->db->select('*')->from('courtone_reservation')->where('username', $this->session->userdata('username'))->where('reservation_status', 1)->get();

    if($query->num_rows() >= 1)
    {
        return FALSE;  
    }
    else
    {
        return TRUE;
    }
}

【问题讨论】:

  • 虽然我对 CI 不是很熟悉,但如果今天匹配,我会有条件地检查 reservation_date。如果是这种情况,您可以检查是否已经进行了预订,如果没有,则可以进行预订。
  • 您需要限制每小时或每天 1 次的预订?
  • 我需要将每个人每天的预订时间限制为 1 小时。这意味着,例如,2 月 23 日,我为 6:00 PM - 7:00 PM 预留了一个时段,然后我无法再为 7:00 PM - 8:00 PM 预留一个时段。不过,我仍然可以为 2 月 24 日预订另一次预订,但当天也应该只允许 1 小时的预订。
  • 如果我在 2 月 23 日晚上 6:00 - 晚上 7:00 预订,我可以在 2 月 23 日晚上 9:00 - 晚上 10:00 再次预订吗?
  • 不,因为我已经用完了 1 小时(下午 6:00 - 晚上 7:00)。我仍然可以在 2 月 24 日预订,但也会有同样的限制。

标签: php sql codeigniter


【解决方案1】:

如果您将预订日期和预订时间存储在单独的列中,我会将日期传递给您的函数并检查他们在该日期是否有预订:-

function check_maxhour_courtone($desired_date = 0)
{        
    $query = $this->db->select('*')->from('courtone_reservation')->where('username', $this->session->userdata('username'))->where('reservation_status', 1)->where('reservation_date', $desired_date)->get();

    if($query->num_rows() >= 1)
    {
        return FALSE;  
    }
    else
    {
        return TRUE;
    }
}

顺便说一句,您可以将所有 where 语句放入一个数组中以便于阅读:-

$where = array(
    'username' => $this->session->userdata('username'),
    'reservation_status' => 1,
    'reservation_date' => $desired_date,
);

$query = $this->db->select('*')->from('courtone_reservation')->where($where)->get();

【讨论】:

    【解决方案2】:

    第一个提示。您需要在函数中传递用户名变量,而不是直接使用会话。这样您就可以控制和检查您需要的任何条件。

    您还需要将预订日期传递给您的函数,如下所示

        function check_maxhour_courtone($username, $date)
        {
            $query = $this->db->select('*')
                     ->from('courtone_reservation')
                     ->where('username', $username)
                     ->where('reservation_status', 1)
                     ->where('reservation_date',$date)
                     ->get();
    
            if($query->num_rows() >= 1)
                return FALSE;  
            return TRUE;
        }
    

    【讨论】:

      猜你喜欢
      • 2016-09-23
      • 1970-01-01
      • 2018-08-18
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多