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

我试图检查表中两列中是否存在一个值。列名是 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();

    }

如果值存在,我希望它检查两列。


MMTTMM
浏览 196回答 2
2回答

HUWWW

我相信它对“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';

慕容森

首先,你有一个错字 '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';这不是最好的解决方案,但它必须是最清楚的。
打开App,查看更多内容
随时随地看视频慕课网APP