Puncte:0

Eroare SQL la încercarea de a elimina câmpul tip conținut

drapel np

Încercam să creez un nou tip de conținut pentru site-ul meu și am ales un nume de câmp („descriere”) care este deja folosit pentru alte tipuri de conținut.

Problema a apărut la salvarea modificărilor, deoarece numele mașinii pentru câmp există deja pentru câmpurile din alte tipuri de conținut, dar cu un tip de câmp diferit. În alte tipuri de conținut am folosit tipul implicit de câmp „Text lung”, dar în acest caz am ales „Citiți mai multe câmpuri”, deoarece se potrivea mai bine cu cazul meu de utilizare.

Am observat problema și m-am întors să schimb numele mașinii doar pentru a descoperi că am creat două câmpuri și unul dintre ele avea un nume de mașină cu problema pe care am menționat-o mai înainte.

Când am încercat să elimin un astfel de câmp, m-am dus la admin/structure/types/manage/my_custom_content_type/fields și folosind opțiunile UI selectați „Șterge”.

Apoi, interfața de utilizare de administrator mi-a arătat un ecran în care afișează modificările pe care urmează să le fac și când am ales „Accept”, site-ul meu mă duce la o pagină goală cu mesajul: „Site-ul web a întâmpinat o eroare neașteptată. Încercați. din nou mai tarziu."

Când verific jurnalele, acesta este mesajul de eroare pe care îl văd:

[06-Nov-2021 03:07:49] AVERTISMENT: [pool www] child 2014 a spus în stderr: "OBSERVAȚI: mesaj PHP: Excepție PHP neprinsă Drupal\Core\Database\DatabaseExceptionWrapper: "SQLSTATE[42S22]: Coloana nu a fost găsită : 1054 Coloana necunoscută „field_description_teaser_value” în „where clause”: SELECT 1 AS expression”
[06-Nov-2021 03:07:49] AVERTISMENT: [pool www] copil 2014 a spus în stderr: „FROM”
[06-Nov-2021 03:07:49] AVERTISMENT: [pool www] child 2014 a spus în stderr: „{node_revision__field_description} t”
[06-Nov-2021 03:07:49] AVERTISMENT: [pool www] child 2014 a spus în stderr: „UNDE (field_description_teaser_value IS NOT NULL) SAU (field_description_teaser_format IS NOT NULL) SAU (field_description_hidden_value NU ESTE NULL (field_description_teaser_value) SAU NU NUL)"
[06-Nov-2021 03:07:49] AVERTISMENT: [pool www] child 2014 a spus în stderr: "LIMIT 1 OFFSET 0; Array"
[06-Nov-2021 03:07:49] AVERTISMENT: [pool www] copil 2014 a spus în stderr: „(”
[06-Nov-2021 03:07:49] AVERTISMENT: [pool www] copil 2014 a spus în stderr: ")"
[06-Nov-2021 03:07:49] AVERTISMENT: [pool www] child 2014 a spus în stderr: "" la linia /var/www/html/web/core/lib/Drupal/Core/Database/Connection.php 701"
2021/11/06 03:07:49 [eroare] 2010#2010: *21776 FastCGI trimis în stderr: „Mesaj PHP: Excepție PHP neprinsă Drupal\Core\Database\DatabaseExceptionWrapper: „SQLSTATE[42S22]: Coloana 1054 nu a fost găsită: Coloana necunoscută „field_description_teaser_value” în „where clause”: SELECT 1 expresie AS
DIN
{node_revision__field_description} t
UNDE (field_description_teaser_value NU ESTE NULL) SAU (field_description_teaser_format NU ESTE NULL) SAU (field_description_hidden_value NU ESTE NULL) SAU (field_description_hidden_format NU ESTE NULL)
LIMITĂ 1 OFFSET 0; Matrice
(
)
" la /var/www/html/web/core/lib/Drupal/Core/Database/Connection.php linia 701" în timp ce citiți antetul răspunsului din amonte, client: 172.18.0.6, server: , cerere: "GET /admin/ structure/types/manage/my_custom_content_type/fields/node.my_custom_content_type.field_description/storage HTTP/1.1”, în amonte: „fastcgi://unix:/run/php-fpm.sock:”, gazdă: „custom-site.ddev .site", referitor: "https://custom-site.ddev.site/admin/structure/types/manage/my_custom_content_type/fields"

La lansare phpmyadmin, niciunul dintre numele coloanelor enumerate în clauza where există în node_revision__field_description tabel, deoarece acele coloane sunt create pentru un tip de câmp diferit.

În acest moment, nu am putut crea niciun conținut folosind acest tip de conținut și aș dori să-l elimin și să încep de la zero prin crearea unuia nou cu nume de mașini mai bune și încercând să evit aceste erori.

Întrebarea mea este: există o modalitate sigură de a elimina tipul de conținut folosind SQL sau drush? Am încercat să-l elimin prin interfața de administrare, dar a rezultat cu aceeași eroare ca atunci când încerc să elimin câmpul.

drapel cn
Cum ai încercat inițial să-l elimini? Ar trebui să utilizați întotdeauna mai întâi interfața de utilizare admin/config management.
pazitos10 avatar
drapel np
@PatrickKenny, mulțumesc pentru comentariu. Mi-am actualizat întrebarea adăugând câteva clarificări, dar tl;dr-ul ar fi: pentru a încerca să o elimin, am folosit administrarea UI/config.
Puncte:0
drapel np

Am reușit să-mi rezolv problema adăugând manual coloanele lipsă la tabelele implicate phpmyadmin.

Primul:

  • Am creat o copie de rezervă db (pentru orice eventualitate).

În al doilea rând, am creat o copie a tabelelor implicate și am mutat astfel de copii într-un alt db menținând atât datele, cât și structura:

  • node_revision__field_description
  • node__field_description

Odată făcută backup-ul, am continuat cu crearea coloanelor lipsă și am copiat atributele acestora din coloane similare din alte tabele (create pentru alte tipuri de conținut).

Apoi, am eliminat tipul de conținut prin interfața de utilizare admin fără nicio problemă.

În cele din urmă, am restaurat copiile originale ale tabelelor în db, înlocuind versiunile modificate ale acestora.

Știu că aceasta nu este probabil cea mai bună soluție pentru toată lumea, dar a funcționat pentru mine.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.