Перейти к содержимому


Функции работы с записями


Сообщений в теме: 58

#1 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 156 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 30 Июнь 2013 - 23:05

Какого типа функции предпочтительно использовать insert_data* или insert_query*? C какими из них не будет проблем при переходе на постргрес. С какими из них не будет возникать проблем при использовании многоязычной конфигурации?

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 658 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 01 Июль 2013 - 10:50

Функции "insert_data" не существует, есть "insert_query" для облегченного программирования с внешними ("русскими") именами таблиц и полей (недостатки: медленная работа и необходимость менять код при переименовании таблиц/полей) и "data_insert", работающая с внутренними db-именами полей и id таблиц (поэтому более быстрая и нет проблем с переименованиями). Обе функции являются оболочками над стандартным "INSERT INTO" и могут меняться под конкретную СУБД (точнее, непосредственной оболочкой является data_insert, а insert_query использует уже ее), поэтому теоретически никаких проблем при переходе на другой движок возникнуть не должно (собственно поэтому их и рекомендуется использовать). Многоязычность конфигурации никак на работу данных функций не влияет, т.к. insert_query использует только оригинальные внешние имена, без перевода, а data_insert вообще работает с внутренними.

#3 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 156 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 04 Июль 2013 - 09:37

    $insert_task_1 = array();
    //Описание задачи
    $insert_task_1['f2441'] = "Выяснить психотип клиента";
    //Время
    $insert_task_1['f2801'] = "0.1";
    //Вид контроля
    $insert_task_1['f2821'] = "По финальному времени";
    //Приоритет
    $insert_task_1['f2831'] = "Важно/срочно";
    //Карточка лица
    $insert_task_1['f3051'] = $line['id'];
    //Кто назначил
    $insert_task_1['f2871'] = $kb_id;
    //Исполнитель
    $insert_task_1['f2861'] = $user['id'];
    //Срок сдачи
    $ceil_sec = ($cc = $insert_task_1['f2801'] * 3600) > 60 ? $cc : 60;
    $insert_task_1['f2791'] = date("Y-m-d H:i", $unix_time_now + $ceil_sec);
    data_insert(11, $insert_task_1);
Время добавления и кто добавил пустые, это нормальное поведение для data_insert?

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 658 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 04 Июль 2013 - 11:32

Не совсем понял вопроса, вы имеете ввиду, что функция data_insert вставила пустые "время добавления" и "кто добавил"?

#5 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 156 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 04 Июль 2013 - 12:38

Просмотр сообщенияCbCoder (04 Июль 2013 - 11:32) писал:

Не совсем понял вопроса, вы имеете ввиду, что функция data_insert вставила пустые "время добавления" и "кто добавил"?
Именно, а точнее она их вообще не вставила. Нужно добавлять дополнительно insert_task_1['add_time'], например, для времени добавления.

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 658 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 04 Июль 2013 - 13:10

Да, так и должно быть. Я вероятно забыл упомянуть выше, что кроме различия в именах полей и таблиц, функции insert_query и data_insert отличаются тем, что insert_query автоматом вставляет умолчания для полей (т.е. как раз для "add_time", к примеру), а data_insert - нет. Функция data_insert более "низкоуровневая", по сути простая оболочка над sql-запросом, тогда как insert_query специально была написана для упрощения вычислений и используется только в них. Кроме заполнения умолчаний, она еще и вычисления автоматом запускает, по изменению полей.

#7 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 658 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 08 Июль 2013 - 15:52

В ближайшее время будет выпущена ревизия, где функции data_insert и data_update будут приближены к функционалу функций insert_query и update_query, в плане заполнения значений по умолчанию и запуска связанных вычислений. Это будет возможно включением в параметры специального флага, без него функции будут работать по старому, т.е. как просто оболочка над запросом. В дальнейшем, после доработки редактора вычислений, все новые функции смогут работать и с внешними именами таблиц и полей (но сохраняться будут с внутренними), таким образом необходимость в старых "упрощенных" функциях отпадет.

#8 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 156 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 08 Июль 2013 - 17:27

Буду ждать

#9 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 156 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 15 Июль 2013 - 14:14

Просмотр сообщенияCbCoder (08 Июль 2013 - 15:52) писал:

В ближайшее время будет выпущена ревизия, где функции data_insert и data_update будут приближены к функционалу функций insert_query и update_query, в плане заполнения значений по умолчанию и запуска связанных вычислений. Это будет возможно включением в параметры специального флага, без него функции будут работать по старому, т.е. как просто оболочка над запросом
Это уже сделано?

#10 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 658 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 15 Июль 2013 - 14:21

Просмотр сообщенияwondertalik (15 Июль 2013 - 14:14) писал:

Это уже сделано?

Вы же видели: http://clientbase.ru...indpost&p=19479

#11 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 156 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 15 Июль 2013 - 14:24

С головы вылетело.

#12 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 156 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 24 Июль 2013 - 23:16

Если я буду очищать через крон удаленные записи из таблицы, скажем с помощью data_delete, то будут ли удалятся файлы или изображения из хранилища? а из кэша?

#13 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 658 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 25 Июль 2013 - 09:29

Нет, файлы необходимо удалять отдельно.

#14 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 156 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 05 Август 2013 - 13:59

Функции типа data_* учитывает права доступа пользователей для записи, обновления, удаления в таблицах или нет?

#15 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 658 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 05 Август 2013 - 14:25

Нет, права на вычисления не распространяются. Вы должны самостоятельно это отслеживать.

#16 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 156 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 21 Август 2013 - 16:16

Проясните мне одну ситуацию. Я чего-то не правильно понимаю?

//имя поля связи.
$field_name_w = "ОЗУ";
$line["{$field_name_w}"]['Статус комплектующего'] = "Установлен";

Array ( [id] => 1 [user_id] => 1 [add_time] => 2013-08-02 07:59:31 [status] => 0 [f981] => 1 [f991] => 1 [f1001] => [f1011] => 0 [f1021] => 0 [f1031] => 0 [f1041] => 0 [f1051] => 0 [f1061] => 0 [f1071] => [f1081] => 0 [f1091] => 0 [f1101] => 1 [f1111] => [f1121] => 2 [f1131] => 2 [f2791] => [f2931] => 0108131.htm [r] => 1 [u] => 1 [ОЗУ] => Array ( [Статус комплектующего] => Установлен ) )

Ошибка системы.
Error generated:
/var/www/it.ivas-group.com.ua/include/functions1.php(262) : get_table()
/var/www/it.ivas-group.com.ua/include/functions1.php(334) : form_event_recurs()
/var/www/it.ivas-group.com.ua/include/functions1.php(604) : calc_line()
/var/www/it.ivas-group.com.ua/view_line2.php(962) : popup_event()
Invalid table_id:


#17 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 658 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 21 Август 2013 - 16:34

Да, неправильно понимаете. В переменной $line на самом деле хранятся внутренние имена полей, а не внешние. То, что вы видите в редакторе - всего лишь отображение, при записи в БД заменяется на "f111" и т.д. Вы же пытаетесь вставить внешнее имя в переменную, естественно в этом случае автозамены при сохранении не произойдет. В результате при выполнении кода получаем ошибку.

#18 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 156 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 21 Август 2013 - 16:36

Понял. Учту. Вы полностью уходите от внешних имен.

#19 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 658 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 21 Август 2013 - 16:38

Да, стараемся. В частности, чтобы не было проблем из-за переименований.

#20 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 156 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 21 Август 2013 - 23:50

Просмотр сообщенияCbCoder (21 Август 2013 - 16:38) писал:

Да, стараемся. В частности, чтобы не было проблем из-за переименований.
//айди поля связи
$idConNameState = 991;
//айди поля статус комплектующего
$idFnameState = 2801;
$statement_w = $line['f'.$idConNameState]['f'.$idFnameState];
$statement_w - что будет в этой переменной, тестовое значение из поля связи - "Установлен" или айди записи из таблицы связи? сначала мне отображало "Установлен", однаком потом, по непонятным мне причинам - отображает айди записи?

Потом добавил строку для сравнения
    $statement_w = $line['f'.$idConNameState]['f'.$idFnameState];
    $st2 = $line['f991']['f2801'];
	    print_r($line);
	    print_r($st2);
    die();

И после этого $statement_w уже содержал "Установлен". В чем причина?

Сообщение отредактировал wondertalik: 21 Август 2013 - 23:59






Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных