Jak utworzyć tabelę w module niestandardowym

13

W Drupal 7 używaliśmy hook_schema()pliku .install do utworzenia tabeli. Wierzę, że w Drupal 8 możesz to również zrobić, ale miałem wrażenie, że powinieneś utworzyć pliki .yml ze swoim schematem.

Jaka jest metoda tworzenia tabel w Drupal 8?

albertski
źródło
3
Nie, masz rację. hook_schemajest wciąż sposobem na tworzenie niestandardowych tabel w Drupal 8, które nieopisywane przez jednostki treści ani pola . Jeśli twoja niestandardowa tabela jest czymś, co uważasz za „treść”, wtedy użyłbym encji, ale jeśli musi być szybszy i będzie miał ograniczoną liczbę wierszy, a ty nie buforujesz w interfejsie, to tabela niestandardowa jest w porządku. Należy również rozważyć, czy ta tabela jest „konfiguracją”, w którym to przypadku należy przejść do encji konfiguracyjnej lub obiektu.
mradcliffe

Odpowiedzi:

10

hook_schema()jest nadal używany z modułów Drupal 8 do tworzenia niestandardowych tabel baz danych używanych z modułu. Nawet użytkownika i moduły Node wdrożyć go, chociaż user_schema()i node_schema()nie definiują schematu dla poszczególnych podmiotów, które są tworzone w inny sposób.

Schematu konfiguracja nie jest używany do tworzenia niestandardowych tabel bazy danych do zastosowań modułu, ale opisuje strukturę plików konfiguracyjnych. Plik PDF znaleziony w dołączonej dokumentacji wyjaśnia związek między plikiem konfiguracyjnym a jego schematem.

zrzut ekranu

Podmioty treści nie używają hook_schema(); Drupal tworzy dla nich tabelę bazy danych w oparciu o pola podstawowe zdefiniowane przez klasę encji treści.

Wybór metody zależy od definicji modułu. To moduł definiuje encję treści, encję konfiguracji lub po prostu korzysta z niestandardowej tabeli. Moduł może nawet korzystać z nich wszystkich.

kiamlaluno
źródło
9

Możesz użyć hook install, aby utworzyć własne tabele, jeśli naprawdę chcesz, chociaż Drupal ma wiele innych gotowych rozwiązań. Ale jeśli chcesz utworzyć własny, w module przykładów jest moduł przykładowy o nazwie dbtng_example: https://www.drupal.org/project/examples , wraz z routingiem służącym do dodawania i usuwania niestandardowych wpisów bazy danych.

Polecam zainstalować i wypróbować, a następnie możesz użyć tego jako podstawy do stworzenia własnej tabeli bazy danych w Drupal 8.

Innym podejściem do rozważenia jest utworzenie encji konfiguracji lub encji treści.

Jeśli używasz narzędzia wiersza poleceń drupal, istnieje nawet polecenie do wygenerowania tych „drupal wygenerować: encja: konfiguracja” i „drupal wygenerować: encja: treść”.

Również w module przykładów znajduje się config_entity_example i content_entity_example.

Od https://www.previousnext.com.au/blog/understanding-drupal-8s-config-entities : „Główną różnicą między treścią a encjami konfiguracyjnymi jest sposób ich przechowywania i (obecnie) encje konfiguracyjne nie są dostępne „.

Istnieje kilka innych gotowych rozwiązań, takich jak moduł config_pages, który pozwala łatwo rozdzielić miejsca do przechowywania danych w Twojej witrynie: https://www.drupal.org/project/config_pages

Ostatnio wykorzystaliśmy je jako jednorazowe strony docelowe, tworząc kontroler i trasę. Ma to ogromną przewagę nad tabelą niestandardową, ponieważ można łatwo dodawać nowe pola i można z łatwością używać typów danych, takich jak obrazy i odwołania do encji, można także ustawiać formatyzatory pól i ładować dane sformatowane za pomocą konstruktora widoku encji config_pages.

oknate
źródło