Есть много творческих подходов, которые вы могли бы использовать.Все зависит от ваших личных предпочтений.
Первый, с включенным построителем запросов, будет использовать встроенный form_validation
и проверить, соответствует ли ваш слаг is_unique
, и если нет,слегка измените его и перепроверьте, пока проверка не пройдет.Хотя form_validation
используется главным образом для проверки и дезинфекции пользовательского ввода, вы можете использовать его практически для чего угодно.
Другой подход заключается в том, чтобы всегда убедиться, что вы получаете уникальный слаг с первой попытки, добавляя одноразовый номер, случайное число или какой-то другой уникальный параметр к сгенерированному слагу перед вставкой.Например:
$slug = url_title($this->input->post('title'), 'dash', TRUE).strtotime(date('Y-m-d H:i:s'));
Вышеприведенный, который, вероятно, является самым простым из возможных подходов, будет работать до тех пор, пока в одну и ту же секунду не будут созданы две записи с одинаковым названием.Это уменьшит вероятность столкновений (почти) полностью.
Третье решение, немного более громоздкое, будет включать вычисление базового слага с помощью $slug = url_title($this->input->post('title'), 'dash', TRUE);
, а затем:
1.-передайте slug в простой запрос к базе данных (по вашему выбору либо прямо в контроллере, либо внутри модели)
$this->db->select('count(*) as slugcount');
$this->db->from('your_table');
$this->db->where('slug', $slug);
$query = $this->db->get();
return $query->row(0)->slugcount;
Если slug действительно уникален, вам будет возвращено 0, если есть один предыдущийзапись будет возвращена 1 и т. д.
После этого вы выбираете: При первом создании слаг добавьте «-0» или «-1» (в зависимости от того, что лучше для SEO).во второй раз вы добавляете «-1» или «-2» (в зависимости от того, что вы определили в предыдущем) и т. д. и т. п.
Так, например, вы изменили бы свой слаг с помощью
$slug = $slug."-".$slugcount;
это будет работать?