ArticleDao.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace internship\model;
  3. use n2n\persistence\orm\EntityManager;
  4. use internship\bo\Article;
  5. use internship\bo\Category;
  6. use n2n\context\attribute\RequestScoped;
  7. /**
  8. * Benutze diese Klasse, um Datenbankabfragen auszuführen.
  9. * Du findest alle Informationen zu Datenbankabfragen in der Doku:
  10. * https://dev.n2n.rocks/de/n2n/docs/persistence-orm#entitymanager
  11. */
  12. #[RequestScoped]
  13. class ArticleDao {
  14. private EntityManager $em;
  15. private function _init(EntityManager $em): void {
  16. $this->em = $em;
  17. }
  18. /**
  19. * Gebe alle {@see Article}-Objekte, nach id absteigend sortiert, zurück.
  20. *
  21. * @return Article[]
  22. */
  23. function getArticles(): array {
  24. $criteria = $this->em->createNqlCriteria(
  25. 'SELECT a FROM Article a ORDER BY a.id DESC');
  26. return $criteria->toQuery()->fetchArray();
  27. }
  28. /**
  29. * Gebe den {@see Article} mit der enstprechenden ID zurück.
  30. *
  31. * @param int $id
  32. * @return Article|null
  33. */
  34. function getArticleById(int $id): ?Article {
  35. return $this->em->find(Article::getClass(),$id);
  36. }
  37. /**
  38. * Gebe alle {@see Article} zurück, welche der übergebenen {@see Category} entsprechen.
  39. *
  40. * @param Category $category
  41. * @return array
  42. */
  43. function getArticlesByCategoryName(string $categoryName): array {
  44. // $criteria = $this->em->createSimpleCriteria(Article::getClass(),
  45. // ['categoryName' => $categoryName]);
  46. // return $criteria->toQuery()->fetchArray();
  47. // $criteria = $this->em->createNqlCriteria(
  48. // 'SELECT a FROM Article a WHERE a.categoryName = :category',
  49. // array('category' => $category));
  50. $criteria = $this->em->createCriteria();
  51. $criteria->select('a')
  52. ->from(Article::getClass(),'a')
  53. ->where(['a.category.name' => $categoryName]);
  54. return $criteria->toQuery()->fetchArray();
  55. }
  56. /**
  57. * Speichere den {@see Article} in der Datenbank.
  58. *
  59. * @param Article $article
  60. * @return void
  61. */
  62. function saveArticle(Article $article): void {
  63. $this->em->persist($article);
  64. }
  65. /**
  66. * Lösche den {@see Article} aus der Datenbank.
  67. *
  68. * @param Article $article
  69. * @return void
  70. */
  71. function removeArticle(Article $article): void {
  72. $this->em->remove($article);
  73. }
  74. }