Puncte:0

Obțineți calea (alias) din interogarea SQL

drapel in

Am o interogare SQL pentru a obține toate nodurile cu ID-ul lor, titlul, data publicării, data modificării etc.

În plus, trebuie să obțin calea către fiecare dintre ele (probabil de la path_alias.alias).

Acum am următoarele (fără alias):

SELECT MIN(node_field_data.nid) AS nid,node_field_data.type, node_field_data.status, node_field_data.title, node_field_data.langcode AS node_field_data_langcode, node_field_data.created, node_field_data.changed
DIN
date_câmp_nod
INNER JOIN nod ON node_field_data.nid = node.nid
GROUP BY node.nid, node_field_data.changed, node_field_data_langcode
ORDER BY node_field_data.nid DESC;

Ai idee cum să-l obții?

drapel cn
Ca modalitate rapidă și murdară de a obține interogări, puteți crea o vizualizare care face ceea ce doriți și apoi să activați „afișați interogarea SQL” în opțiunile de administrare Vizualizări.
drapel in
da, este ceea ce am făcut, dar am extins puțin această interogare, deoarece trebuie să salvez rezultatele în CSV... Vizualizări care oferă o interogare puțin diferită de cea necesară
Puncte:2
drapel in

Dacă doriți să accesați entitățile Drupal, atunci ar trebui să utilizați EntityTypeManager getStorage() metodă de a returna un controler de stocare pentru noduri:

// Obține o referință pentru handler de stocare pentru Nodes.
$node_storage = \Drupal::entityTypeManager()->getStorage("nod");
// Încărcați un nod arbitrar, așa cum este identificat de variabila $nid.
$nod = $node_storage->load($nid);

Fiind că un nod este un tip de entitate de conținut, veți avea întregul API așa cum este definit de Drupal\node\NodeInterface, a lucra cu. Aceasta include posibilitatea de a apela:

// Obține calea internă, alias cale dacă există, pentru o entitate.
$nod->toUrl()->toString();

Pentru mai multe informații despre cum să lucrați cu Entități în Drupal, vă rugăm să vedeți această postare, din care am împrumutat exemplul de mai sus: https://www.drupal.org/docs/drupal-apis/entity-api/working-with-the-entity-api

drapel in
Nu am nevoie de asta, această interogare va funcționa în afara Drupal, așa cum vedeți, este o interogare SQL directă.
drapel in
Înțeleg complet. :) După cum se dovedește, este considerată cea mai bună practică de a folosi stratul de entitate pentru a gestiona, interoga și edita entitățile în Drupal.Ocolind sub-sistemele desemnate, veți duce o luptă dificilă, în care probabil că va trebui oricum să încărcați entități Node, pentru a obține ceea ce cereți. În plus, lucruri precum valorile proprietăților interne și numele tabelelor nu sunt considerate garantate și se pot schimba în mod neașteptat. API-ul este garantat; implementarea nu este.
apaderno avatar
drapel us
Pe Drupal 8, aliasurile de căi sunt acum și ele entități. Chiar dacă nodurile și aliasurile de cale nu ar fi entități, ar fi întotdeauna mai bine să utilizați API-ul existent, decât să interogați direct baza de date Drupal. Drupal poate expune și un API REST, ceea ce face posibilă interogarea entităților fără a cunoaște niciun detaliu cu privire la tabelele bazei de date utilizate în acest scop sau ce câmpuri conțin acele tabele.
apaderno avatar
drapel us
Da, prefer să rulez cod PHP pentru a face această sarcină decât să interoghez baza de date de pe un terminal MySQL. Acest lucru necesită bootstrap Drupal, dacă codul PHP nu este pentru un modul Drupal, dar este un script extern care accesează datele Drupal. (Este extern din punctul de vedere al Drupal.) Alternativ, aș folosi implementările Drupal REST API dacă informațiile sunt necesare în codul care nu este scris în PHP.

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.