检查表编码器中是否已存在两个值



我正在尝试检查表中的两列中是否存在值。列名是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();
}

我希望它检查两列的值是否存在。

我相信它不适用于"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模式,很多控制器逻辑都应该在模型中。IMO,所有这些都应该是。

我会用一个名为check()的函数替换模型函数getByWhere()。如果任何记录'id!= $notIdAND'on_number' = $on__number' 和 off_number' $off_number,它将返回 true。如果缺少任一必需的输入,或者未找到任何记录,则返回 false。

在查看以下代码时,请务必了解,如果$_GET('some_input')为空,$this->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';

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

最新更新