Frage zu Array in ein Model schreiben?
Ich möchte gerne ein array
array(1) { [0]=> object(App\Content\ContentModel)#24 (17) { ["id"]=> int(1) ["title"]=> string(7) "Healing" ["sub_title"]=> string(0) "" ["content"]=> string(0) "" ["sub_content"]=> string(0) "" ["offer1_time"]=> string(0) "" ["offer1_price"]=> string(0) "" ["offer2_time"]=> string(0) "" ["offer2_price"]=> string(0) "" ["offer_extension_time"]=> string(0) "" ["offer_extension_price"]=> string(0) "" ["image"]=> string(35) "pexels-arina-krasnikova-6997996.jpg" ["parent"]=> int(1) ["sequence"]=> int(1) ["link"]=> string(2) "15" ["button_text"]=> string(11) "Zum Angebot" ["module"]=> string(0) "" } }
das ich aus der Datenbank erhalte über ein repository in ein model speichern damit ich mehrere datensätze zu einem Modul hinzufügen kann, nun wirft es mir aber eine fehlermeldung an und ich komm einfach nicht weiter.
Hier das repository:
public function fetchModulesForPage(int $pageId): array
{
$stmt = $this->pdo->prepare('SELECT modules.* FROM modules JOIN pages ON modules.parent = pages.id WHERE pages.id = :pageId');
$stmt->bindValue(':pageId', $pageId);
$stmt->fetchAll(PDO::FETCH_CLASS, ModulesModel::class);
$stmt->execute();
$modules = $stmt->fetch();
$contentRepository = new ContentRepository($this->pdo);
foreach ($modules as $module) {
$moduleContent = $contentRepository->fetchContentForModule($module);
$module->setContent($moduleContent);
}
return $modules;
}
und hier das Model:
<?php
namespace App\Modules;
class ModulesModel
{
public int $id;
public string $title;
public int $parent;
public string $module;
public int $sequence;
public array $content = [];
public function setContent(array $content): void
{
$this->content = $content;
}
}
die fehlermeldung ist:
Fatal error: Uncaught Error: Call to a member function setContent() on int in C:\xampp\htdocs\test\src\Modules\ModulesRepository.php:29 Stack trace: #0 C:\xampp\htdocs\test\src\Controller\PagesController.php(61): App\Modules\ModulesRepository->fetchModulesForPage(6) #1 C:\xampp\htdocs\test\index.php(73): App\Controller\PagesController->getAllContentFromModules(6) #2 {main} thrown in C:\xampp\htdocs\test\src\Modules\ModulesRepository.php on line 29
die line 29 ist folgende:
$module->setContent($moduleContent);
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);
so bekomme ich einen weiteren error: