Freunde. Derzeit entwickle ich s komplexe Suche. Ich habe nächste Klassen:Eine Suchklasse. Muster Beratung Anfrage
App\Search\Search
App\Search\OrderBy\Relevance
App\Search\OrderBy\Priority
App\Search\OrderBy\WordMatch
App \ Search \ Search ist die Hauptsuchklasse. Alle Klassen in \ OrderBy nehmen das Query Builder-Objekt als Referenz an und wenden einige Logiken darauf an.
Hier sind einige Code-Beispiele:
//App\Search\Search
Class Search {
protected $query;
public function __construct($phrase)
{
$this->phrase = $phrase;
$this->query = App\Airport::newQuery();
}
public function orderByRelevance()
{
OrderBy\Relevance::apply($this->query);
return $this;
}
public function orderByPriority()
{
OrderBy\Priority::apply($this->query);
return $this;
}
public function orderByWordMatch()
{
OrderBy\WordMatch::apply($this->query);
return $this;
}
}
Die Hauptidee ist es, bedingt mehrere Bestellung auf eine Abfrage gelten, wie folgt aus:
$search = new Search('Berlin');
$search->orderByRelevance()->orderByPriority()->get();
So Code funktioniert gut, aber ich fühle mich einige code riechen darin, vor allem jede Order-Methode manuell zu deklarieren. Gibt es irgendwelche Muster oder Tricks, die meine Suchklasse verbessern könnten?