Ich denke, dass ich das OOP-Paradigma auf der Basisebene habe, aber es fällt mir schwer, den richtigen Weg zum Suchen von Datensätzen in einer Datenbank zu finden. Ich vermute, das ist, weil ich nicht wirklich OOP so viel wie ich denke, ich ...Wie arbeite ich mit Sammlungen von Objekten? Oder ruft ein Objekt eine Sammlung ähnlicher Objekte ab?
Die Anwendung, die ich versuche zu schreiben ist ein Warenkorb, weil es viele gute Kandidaten für Objekte hat. Das Objekt, mit dem ich arbeiten werde, ist ein Produkt (ja, das ist sehr primitiv).
<?php
class Product
{
public $id = 0;
public $name = '';
public $price = 0;
function __construct($id)
{
// if $id exists try to retrieve
// a product with $id
// else create a new product
// and set $this->id
}
}
$product = new Product();
echo $product->name;
?>
Einfach genug. Aber jetzt möchte ich mehrere Produkte (für eine Suchergebnisseite) nachschlagen und bin mir nicht sicher, wie ich damit umgehen soll.
Meine Neigung ist, eine andere Klasse zu schreiben, die einige Eingaben nimmt und eine SQL-Abfrage ausführt, die nur eine Liste von Produkt-IDs zurückgibt. Ich würde dann diese Ergebnisse durchlaufen und für jedes Produkt ein Produktobjekt erstellen. Ich könnte dann das Array von Objekten durchlaufen und meine Suchergebnisseite erstellen.
Ich bin mir nicht sicher warum, aber das fühlt sich einfach nicht richtig an. Scheint zu viel Arbeit, weil ich zuerst eine Abfrage mache, um nur eine Liste von Produkt-IDs zu erhalten, und dann weitere Abfragen, um die Daten jedes Produkts zu erhalten. Es wäre viel schneller, wenn nur eine Abfrage durchgeführt würde, die alle Daten zurückgab, die ich brauche.
Was ist das Richtige? Etwas anderes vielleicht?
Von "ist der Datenbank nicht bewusst" meinst du, dass das Objekt sich nicht mit Daten füllen sollte? – barophobia
Zumindest nicht durch Abfrage der Datenbank selbst im Konstruktor. Vielleicht gibt es eine statische Methode, die ein Array (oder eine andere Sammlung) eines Objekts aus einer Datenquelle von "Datensätzen", z. ein Iterator. PDO-Ergebnisse können als Iterator verwendet werden; Die Methode muss nicht einmal wissen, dass sie das Ergebnis einer Datenbankabfrage ist. – VolkerK