Codeigniter — проверьте, является ли значение уникальным

#php #codeigniter #codeigniter-2

#php #codeigniter #codeigniter-2

Вопрос:

Я пытаюсь проверить, является ли значение уникальным. У меня есть функция, но как я могу проверить ее снова.

Это функция (она работает):

 public function is_unique($field, $val)
    {
        $this->db->select($field)->where($field, $val);
        $result = $this->get();
        $result = $result['data'];

        return $bool = count($result) == 0 ? $val : FALSE;
    }
  

Здесь я проверяю значение, чтобы увидеть, является ли оно уникальным:

 $unique_code = random_string('alnum', 6);
$unique_code = $this->posts->is_unuque('unique_code', $unique_code) != FALSE ? $unique_code: random_string('alnum', 6);
  

Как я могу создать новое значение, если функция возвращает FALSE, и проверить новое значение (выполнять цикл до тех пор, пока значение не станет уникальным)?

Ответ №1:

Попробуйте это;

 function is_unique($field, $val = null)
{
      if ( is_null($val))
      {
                // No $val supplied, so we generare a new one.
                $val = random_string('alnum', 6);
      }

      $this->db->select($field)->where($field, $val);
      $result = $this->db->get('table');

      if ( $result->num_rows() > 0 )
      {
                // Found a match
                // Try again....
                $this->is_unique($field);
      }
      else
      {
                // No match
                return $val;
      }
}
  

Если вы не укажете значение $val, функция сгенерирует новую случайную строку, затем проверьте, является ли она уникальной. Если это не так, он повторяет попытку.

Ответ №2:

 return (count($result) == 0 ? $val : $this->is_unique($filed,random_string('alnum', 6));
  

может быть что-то вроде этого вместо возврата false запускайте функцию, пока результат не станет уникальным

 $unique_code = $this->posts->is_unuque('unique_code', $unique_code);