Рейтинг:0

Поле обновления без сохранения узла

флаг ve

Я новичок в Drupal, я хотел бы вставить значение в поле узла. Но вместо node->save() я хочу избежать любого предварительного сохранения и вставить его напрямую с помощью sql-запроса. У меня есть entity_id для вставки также в столбец field_NAME_value, это идентификатор узла? Или как мне это получить? Или есть способ сохранить узел без вызова presave? Спасибо

флаг cn
При всем уважении, если вам нужно спросить (т. е. вы не можете понять/интуитивно), какие столбцы в этих таблицах, вы, вероятно, в конечном итоге что-то сломаете, манипулируя базой данных вручную. Это может помочь перевернуть вашу проблему с ног на голову и объяснить, что не так с хуком(ами) presave, работающим в первую очередь. Вместо этого вы могли бы остановить это поведение более элегантным и ориентированным на будущее способом.
Jaypan avatar
флаг de
Я должен согласиться с Клайвом. Это опасно, плохая практика и пропускает проверки API. Почему вы не хотите сохранять узел?
jacksparrow avatar
флаг ve
@Clive Спасибо, ребята. На самом деле у меня есть пакетная операция (более 20 тыс. узлов), время ожидания которой истекло, есть некоторые предварительные сохранения, которые вызываются, и весь процесс идет медленно, поэтому, чтобы ускорить это, я хотел попробовать обновить напрямую БД, что ускорит работу. .
флаг cn
У меня возникло бы искушение признать, что пакет будет медленным, и вместо этого посмотреть на его разбиение на более мелкие части - вы не должны получать тайм-аут при выполнении пакетной операции, вот почему они существуют в первую очередь. Если вы уменьшите количество узлов на операцию, вы даже можете обнаружить, что весь процесс в целом выполняется быстрее, так как вы не будете использовать столько ресурсов на запрос.
jacksparrow avatar
флаг ve
@Clive спасибо за ваши мысли, они полезны. При запуске пакета во время hook_deploy происходит тайм-аут после 14400 с, исходящий от Drush (он установлен в drush.php), а также тайм-аут базы данных, я не знаю, как это переопределить, поэтому я пытался уменьшить время всего процесса. Я думаю, я создам cron, который будет запускать пакет в 4 раза и делить общее количество узлов на 4.
флаг cn
О, я вижу, тогда это также может быть полезно: https://drupal.stackexchange.com/questions/280846/how-to-change-the-drush-default-timeout-of-14400
jacksparrow avatar
флаг ve
@Clive спасибо за помощь!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.