Je veux être en mesure de faire quelque chose comme ceci:Comment créer une requête mysql via un ensemble de méthodes PHP OOP?
$table_object->getRows()->where($wer)->or($or)->orderBy('field', 'DESC');
Si j'étais sûr que toutes les méthodes seront appelées à chaque fois et dans cet ordre, il serait alors simple et je peux retourner une instance de l'objet lui-même à chaque appel de méthode afin que la requête soit générée et finalement exécutée à la méthode orderBy. Cependant, je veux la classe pour être en mesure d'exécuter également des requêtes comme ceci:
$table_object->getRows()->where($wer);
Le code suivant travaillerait pour le premier exemple de code (lorsque toutes les méthodes sont appelées), mais pas avec la seconde où seule méthode où est appelé après getRows. Il ne renvoie qu'une instance de lui-même.
class DatabaseTable extends Database
{
protected $table_name;
protected $query;
public function getRows()
{
return ($this instanceof self)? $this : false;
}
public function where(array $where)
{
foreach ($where as $field => $value){
$w[] = $field . ' = "' . $this->escapeString($value) . '"';
}
$this->query = "SELECT * FROM {$this->table_name} WHERE " . join($w, ' AND '));
return $this;
}
public function or(array $Clause)
{
foreach ($clause as $field => $value){
$o[] = $field . ' = "' . $this->escapeString($value) . '"';
}
$this->query .= join($w, ' AND ');
return $this;
}
public function orderBy($field, $type)
{
$this->query .= " ORDER BY $field $type ";
$this->executeQuery($this->query);
}
}
ignorera toutes les erreurs mineures - (i na pas vérifier si cela a fonctionné pour sûr, mais il devrait.) comment puis-je y parvenir?
Désolé si je semble que je suis à la traîne, mais $ table_object-> getRows() -> Où ($ wer) -> OR ($ ou) -> orderBy ('field', 'DESC'); Vous avez essentiellement écrit la requête entière là. Pourquoi ne pas simplement écrire "SELECT * WHERE {$ wer} OU {$ ou} ORDER BY le champ DESC" ._.? – Warty
@ItzWarty parce qu'il veut probablement un wrapper OOP DB-agnostique pour cela. – Gordon
Je suis d'accord avec ltzWarty. Il n'y a pas de bonne raison de prendre un langage spécifique à un domaine décent et de le transformer en un désordre OOP laid. – Imbue