Frage zu Array in ein Model schreiben?

2 Antworten

Die Reihenfolge deiner Operationen beim Auslesen ist nicht richtig. Du versuchst die Ergebnisse auszulesen, bevor der Query überhaupt abgeschickt wurde.

Rufe erst execute auf, danach fetchAll.

In $modules sollte zudem wohl das Array mit dem ModulesModel-Instanzen enthalten sein.

$modules = $stmt->fetchAll(PDO::FETCH_CLASS, ModulesModel::class);

Mit fetch hingegen liest du nur einen Eintrag aus. Die Schleife läuft in dem Fall über die Felder deines Objekts.

fetch und fetchAll zusammen? Sollte es nicht eher so aussehen:

$stmt = $this->pdo->prepare('SELECT modules.* FROM modules JOIN pages ON modules.parent = pages.id WHERE pages.id = :pageId');
$stmt->bindValue(':pageId', $pageId);
$stmt->execute();

$modules = $stmt->fetchAll(PDO::FETCH_CLASS, ModulesModel::class);
Woher ich das weiß:Berufserfahrung – Entwickle seit > 20 Jahren Anwendungen mit PHP.
Thooms 
Fragesteller
 13.11.2023, 19:34

so bekomme ich einen weiteren error:

Fatal error: Uncaught TypeError: Cannot assign string to property App\Modules\ModulesModel::$content of type array in C:\xampp\htdocs\test\src\Modules\ModulesRepository.php:19 Stack trace: #0 C:\xampp\htdocs\test\src\Modules\ModulesRepository.php(19): PDOStatement->fetchAll(8, 'App\\Modules\\Mod...') #1 C:\xampp\htdocs\test\src\Controller\PagesController.php(61): App\Modules\ModulesRepository->fetchModulesForPage(6) #2 C:\xampp\htdocs\test\index.php(73): App\Controller\PagesController->getAllContentFromModules(6) #3 {main} thrown in C:\xampp\htdocs\test\src\Modules\ModulesRepository.php on line 19
0
regex9  15.11.2023, 19:30
@Thooms

Der Datentyp deines $content-Feldes in der ModulesModel-Klasse stimmt nicht mit dem Typ überein, den die Datenbank liefert. In der Datenbank beinhaltet die content-Spalte einen String, in deiner Klasse ein Array. Es sollte wohl auf beiden Seiten ein String sein.

0