Страница 1 из 2

Уникальный статус у одной записей сущности

Добавлено: 23 май 2023, 17:24
mailarn
Есть сущность и поле Выпадающий список, условно со значениями Да/Нет
Надо что бы в любой записи сущности при изменении на "Да", у записи, где в тот момент "Да", менялось на "Нет"
Т.е. Во всей сущности только одна запись может быть со значением Да.

На форуме обсуждалось подобное но только со вложенными сущностями.
Видимо надо делать автоматизацией - выполнить php скрипт.
Поделитесь кодом пожалуйста )

Re: Уникальный статус у одной записей сущности

Добавлено: 23 май 2023, 17:44
alexinc
mailarn писал(а): 23 май 2023, 17:24 Есть сущность и поле Выпадающий список, условно со значениями Да/Нет
Надо что бы в любой записи сущности при изменении на "Да", у записи, где в тот момент "Да", менялось на "Нет"
Т.е. Во всей сущности только одна запись может быть со значением Да.

На форуме обсуждалось подобное но только со вложенными сущностями.
Видимо надо делать автоматизацией - выполнить php скрипт.
Поделитесь кодом пожалуйста )
А делал нечто подобное. То есть, у меня было так:
Если в записях где-то стоит галка Да, то в других записях ее нельзя поставить и выводиться сообщение, что в записи № такая-то уже отмечено, снимите ее и будет счастье.
Если такое интересное - могу посмотреть.

Re: Уникальный статус у одной записей сущности

Добавлено: 23 май 2023, 18:01
mailarn
alexinc писал(а): 23 май 2023, 17:44 Если такое интересное - могу посмотреть.
Мне желательно автоматизацией. В одной записи переключил на "Да", все остальные записи "Нет"

Re: Уникальный статус у одной записей сущности

Добавлено: 23 май 2023, 22:07
tehnos
Вот костыль. Простите за убожество, но если никто ничего не предлагает...
Нам понадобится такое же количество полей "Ajax запрос" сколько и логических полей.
Изменение логических полей в форме.

Код: Выделить всё

// скрыть поле ajax
echo '<script>$(".form-group-1073").hide()</script>';

// поле в форме
$var1 = [1074];

if($var1 == 'true') {
  echo '<script>$("#fields_1075").val("false");
  				$("#fields_1076").val("false");
  				$("#fields_1077").val("false");
  				$("#fields_1078").val("false");
  </script>';
}

Код: Выделить всё

// скрыть поле ajax
echo '<script>$(".form-group-1079").hide()</script>';

// поле в форме
$var2 = [1075];

if($var2 == 'true') {
  echo '<script>$("#fields_1074").val("false");
  				$("#fields_1076").val("false");
  				$("#fields_1077").val("false");
  				$("#fields_1078").val("false");
  </script>';
}

Код: Выделить всё

// скрыть поле ajax
echo '<script>$(".form-group-1080").hide()</script>';

// поле в форме
$var3 = [1076];

if($var3 == 'true') {
  echo '<script>$("#fields_1074").val("false");
  				$("#fields_1075").val("false");
  				$("#fields_1077").val("false");
  				$("#fields_1078").val("false");
  </script>';
}

Код: Выделить всё

// скрыть поле ajax
echo '<script>$(".form-group-1081").hide()</script>';

// поле в форме
$var4 = [1077];

if($var4 == 'true') {
  echo '<script>$("#fields_1074").val("false");
  				$("#fields_1075").val("false");
  				$("#fields_1076").val("false");
  				$("#fields_1078").val("false");
  </script>';
}

Код: Выделить всё

// скрыть поле ajax
echo '<script>$(".form-group-1082").hide()</script>';

// поле в форме
$var5 = [1078];

if($var5 == 'true') {
  echo '<script>$("#fields_1074").val("false");
  				$("#fields_1075").val("false");
  				$("#fields_1076").val("false");
  				$("#fields_1077").val("false");
  </script>';
}

Re: Уникальный статус у одной записей сущности

Добавлено: 23 май 2023, 22:15
tehnos
Аааа, кажется я не правильно понял исходный вопрос. Значения не в форме менять надо...
Изменение логического поля во всех записях кроме текущей. Если так, то вот:
Поле "Ajax запрос". При выборе в логическом поле текущей записи значения "Да", все остальные записи перепишутся значением "Нет":

Код: Выделить всё

// скрыть поле ajax с номером 1083
echo '<script>$(".form-group-1083").hide()</script>';

// YY - номер сущности
$log = [XXX]; // логическое поле которое мы отслеживаем
$item_id = $_GET['item_id']; // получаем id текущей записи

if($log == 'true') {
 db_query("UPDATE `app_entity_YY` SET `field_XXX` = 'false' WHERE `id` != {$item_id} AND `field_XXX` = 'true'"); 
}

Re: Уникальный статус у одной записей сущности

Добавлено: 23 май 2023, 22:40
mailarn
Логика понятна, но синтаксис не нравится. Ладно, разбираться буду
sin.jpg

Re: Уникальный статус у одной записей сущности

Добавлено: 23 май 2023, 23:50
tehnos
Простите, накосячил с полем [id].
В ajax полях его надо вот так звать:

Код: Выделить всё

$item_id = $_GET['item_id'];
Поправил предыдущий пост.

Re: Уникальный статус у одной записей сущности

Добавлено: 24 май 2023, 02:38
Fait
Думаю, автор имел ввиду не про AJAX, а чтобы так было: поставил галочку в текущей записи - и где-то в другой записи, где эта галочка была, она отключилась автоматически.

Если я правильно понимаю, то вот этот код нужно назначить на автоматизацию с типом срабатывания "После изменения записи":

Код: Выделить всё

$item_id = [id];
$flag = [777];
if ($flag == 'true') {
    db_query('update app_entity_77 set field_777="false" where id<>'.$item_id);
}
77 - id сущности
777 - id поля с флажком

Если используется список, то всё аналогично происходит, только код такой будет:

Код: Выделить всё

$item_id = [id];
$f_list = [777];
if ($f_list == 55) {
    db_query('update app_entity_77 set field_777=44 where id<>'.$item_id);
}
77 - id сущности
777 - id поля со списком
44 - id значения поля "Нет"
55 - id значения поля "Да"

Re: Уникальный статус у одной записей сущности

Добавлено: 24 май 2023, 07:50
nruslan2
Fait писал(а): 24 май 2023, 02:38 Думаю, автор имел ввиду не про AJAX, а чтобы так было: поставил галочку в текущей записи - и где-то в другой записи, где эта галочка была, она отключилась автоматически.

Если я правильно понимаю, то вот этот код нужно назначить на автоматизацию с типом срабатывания "После изменения записи":

Код: Выделить всё

$item_id = [id];
$flag = [777];
if ($flag == 'true') {
    db_query('update app_entity_77 set field_777="false" where id<>'.$item_id);
}
77 - id сущности
777 - id поля с флажком

Если используется список, то всё аналогично происходит, только код такой будет:

Код: Выделить всё

$item_id = [id];
$f_list = [777];
if ($f_list == 55) {
    db_query('update app_entity_77 set field_777=44 where id<>'.$item_id);
}
77 - id сущности
777 - id поля со списком
44 - id значения поля "Нет"
55 - id значения поля "Да
в обоих кодах лучше после where добавить условие выборки значения полей со значением "да"! так как смысла менять все записи нет, в некоторых же будет и так значение "нет"!
Например: если у вас их там 25000, потом будут жалобы на тормаза и вылеты)

Re: Уникальный статус у одной записей сущности

Добавлено: 24 май 2023, 08:48
tehnos
Согласен. Добавил в свой пост условие, что меняем только трушные записи.
Да и php скрипт в автоматизацию при изменении записи - более логично конечно.

Для автоматизации:

Код: Выделить всё

$log = [XXX]; // логическое поле которое мы отслеживаем
if($log == 'true') {
 db_query("UPDATE `app_entity_YY` SET `field_XXX` = 'false' WHERE `id` != [id] AND `field_XXX` = 'true'"); 
}