为了账号安全,请及时绑定邮箱和手机立即绑定

检查表 codeigniter 中是否已经存在两个值

检查表 codeigniter 中是否已经存在两个值

PHP
MMTTMM 2021-11-26 19:30:31
我试图检查表中两列中是否存在一个值。列名是 on_number 和 off_number。我在我的控制器中尝试了以下操作。但是,该检查仅适用于 off_number 列而不适用于 on_number。我的控制器。 public function check()        {            $on_number = !empty(get('on_number')) ? get('on_number') : false;            $notId = !empty($this->input->get('notId')) ? $this->input->get('notId') : 0;            if($on_number)                $exists = count($this->duty_book_model->getByWhere([                        'on_number' => $on__number,                        'id !=' => $notId,                    ])) > 0 ? true : false;                if($on_number)                $exists = count($this->duty_book_model->getByWhere([                        'off_number' => $on_number,                        'id !=' => $notId,                    ])) > 0 ? true : false;            echo $exists ? 'false' : 'true';        } My Model     class Duty_book_model extends MY_Model {        public $table = 'tbl_duty_type';        public function __construct()        {            parent::__construct();        }    }扩展 MY_Model 具有:public function getByWhere($whereArg, $args = [])    {        if(isset($args['order']))            $this->db->order_by($args['order'][0], $args['order'][1]);        return $this->db->get_where($this->table, $whereArg)->result();    }如果值存在,我希望它检查两列。
查看完整描述

2 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

我相信它对“off_number”不起作用的原因在于这段代码


if($on_number)

$exists = count($this->duty_book_model->getByWhere([

          //THE NEXT LINE IS THE PROBLEM - LOOK AT THE VALUE!!!

          'off_number' => $on_number, //value should be $off_number - right?

          'id !=' => $notId,])) > 0 ? true : false;

也就是说,我认为您的代码一团糟。我这么说是因为要遵守 MVC 模式,您的控制器逻辑的很多都应该在模型中。海事组织,这一切都应该是。


我会getByWhere()用一个名为check(). 如果有'id!= $notId AND'on_number' = $on__number` AND off_number', $off_number 的记录,它将返回 true 。如果缺少任何一个必需的输入,或者没有找到记录,则返回 false。


当您查看以下代码时,重要的是要了解$this->input->get('some_input')如果$_GET('some_input')为空则返回 null 。


class Duty_book_model extends MY_Model

{

    public $table = 'tbl_duty_type';


    public function check()

    {

        $on_number = $this->input->get('on_number');

        $notId = $this->input->get('notId');

        if(empty($on_number) || empty($notId))

        {

            return false;

        }


        $query = $this->db

                ->select('id')  //could be any field

                ->where('id !=', $notId)

                ->where('on_number', $on__number)

                ->where('off_number', $off_number) 

                ->get($this->table);

        //given $notId = 111 AND $on_number = 222 AND $off_number = 333           

        //produces the query string 

        //SELECT `id` FROM `tbl_duty_type` WHERE `id` != 111 AND `on_number` = 222 AND `off_number` = 333


        if($query) //might be false if the query string fails to work

        {

            return $query->num_rows > 0; //returns boolean

        }


        return false;

    }


}

那么你在控制器中所需要的就是


$exists = $this->duty_book_model->check();

echo $exists ? 'false' : 'true';


查看完整回答
反对 回复 2021-11-26
?
慕容森

TA贡献1853条经验 获得超18个赞

首先,你有一个错字 'on_number' => $on__number, 你已经加倍下划线$on__number


第二件事 - 您的支票仅适用于的原因off_number是因为您$exist在两种情况下都使用了变量。对于 的检查结果是什么并不重要on_number,因为它总是会被off_number检查重写。


解决这些问题的一种方法是使用两个不同的变量:


if($on_number){

   $exists_on = count($this->duty_book_model->getByWhere([

      'on_number' => $on_number,

      'id !=' => $notId,

   ])) > 0 ? true : false;


   $exists_off = count($this->duty_book_model->getByWhere([

      'off_number' => $on_number,

      'id !=' => $notId,

   ])) > 0 ? true : false;

}

echo (($exists_on===true)&&(exists_off===true)) ? 'false' : 'true';

这不是最好的解决方案,但它必须是最清楚的。


查看完整回答
反对 回复 2021-11-26
  • 2 回答
  • 0 关注
  • 195 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信