-
-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Neue Methode Entry::collection() #97
Conversation
Flexible Bereitstellung von Entry-Datensätzen/Instanzen nach Kategorie, Status und Sprache.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ich würde vorschlagen, nicht noch eine Methode dafür zu etablieren sondern die Methoden findByCategory() / findByCategories() um einen lang-Parameter zu erweitern / verbessern.
Lines 541 to 557 in c770420
public static function findByCategoryIds(string|array|null $category_ids = null, int $status = 1): rex_yform_manager_collection | |
{ | |
$query = self::query()->where('status', $status, '>='); | |
if ($category_ids) { | |
// Wenn es ein String ist, in ein Array umwandeln | |
if (is_string($category_ids)) { | |
$category_ids = explode(',', $category_ids); | |
} | |
// whereInList anwenden | |
// FIXME: whereInList gibt es nicht! Ist $query->whereListContains() gemeint? | |
$query->whereInList('category_ids', $category_ids); | |
} | |
return $query->find(); | |
} |
In jedem Fall würde ich gerne weiter mit dem Präfix find
weiterarbeiten, um die Nähe zu YOrm und anderen Addons von mir zu halten. Da ist für mich intuitiv klar, es wird eine Collection zurückgegeben.
Irgendwas ist hier mal wieder aufgemischt. Das Ding ist out of sync mit meiner lokalen Instanz und ich kann keine Verbindung aufbauen, um den Code zu ändern. Github halt. Ich lösche einfach mal diesen PR und die Branch und fange von vorne an. |
### Hinzufügen der `findByCategories`-Methode zur `Entry`-Klasse #### Zusammenfassung: In diesem Pull Request wird eine neue Methode `findByCategories` zur `Entry`-Klasse hinzugefügt. Diese Methode ermöglicht es, Einträge anhand einer oder mehrerer Kategorien zu finden, wobei der Status der Einträge ebenfalls berücksichtigt wird. Die Methode akzeptiert sowohl Strings als auch Arrays als Eingabeparameter für die Kategorie-IDs und ist kompatibel mit PHP 8.2. #### Änderungen im Detail: - **Neue Methode `findByCategories`:** - **Parameter**: - `string|array|null $category_ids`: Akzeptiert entweder eine kommagetrennte Liste von Kategorie-IDs als String, ein Array von Kategorie-IDs oder `null`. - `int $status`: Definiert den Mindeststatus der Einträge, die gefiltert werden sollen. - **Funktionalität**: - Wenn ein String übergeben wird, wird dieser in ein Array umgewandelt. - Die Methode verwendet `whereInList`, um die Einträge zu filtern, die den angegebenen Kategorien zugeordnet sind. - Es wird der `status` der Einträge berücksichtigt, sodass nur Einträge zurückgegeben werden, die einen bestimmten Status erfüllen. - **Typdeklaration**: - Die Methode nutzt die neuen Union Types von PHP 8.2 (`string|array|null`), um klar anzugeben, welche Typen akzeptiert werden. #### Anwendungsbeispiel: ```php // Suche nach Einträgen, die den Kategorien 1 und 2 zugeordnet sind und den Status 1 oder höher haben $entries = FriendsOfRedaxo\Neues\Entry::findByCategories([1, 2], 1); // Suche mit einer kommagetrennten Liste von Kategorien als String $entries = FriendsOfRedaxo\Neues\Entry::findByCategories('1,2', 1); // Suche nach allen Einträgen mit einem Status von 1 oder höher, ohne Kategorienfilter $entries = FriendsOfRedaxo\Neues\Entry::findByCategories(null, 1); ```
Flexible Bereitstellung von Entry-Datensätzen/Instanzen nach Kategorie, Status und Sprache.
Auslöser die Frage von @claudihey im Slack, wie man denn eine sprachgefilterte Entry-Collection bekommt. Der Umweg über
EntryLang
ist grundsätzlich OK (außer dass man erstmal drauf kommen muss)Er hat aber keine weiteren direkten Filter z.B. für Status oder Categorie. Hier also ein Vorschlag für eine etwas flexiblere Methode, angesiedelt in der Klasse
Entry
. Als Parameter sind möglich:$deletedEntries = Entry::collection( status: 2);
$onlineEntriesDe = Entry::collection( status: 1, language: 'de');
$onlineEntriesCat = Entry::collection( status: 1, category: [1,2]);