C'est vrai que dans ce genre d'exemple, le "$in" étant créé au même endroit que la query, ça me semble lisible & fiable.
Après, je n'ai perso pas tellement ce problème, puisqu'étant dans une procédure stockée, je peux boucler du DELETE FROM ants WHERE id = :id pour chaque id. TU peux éventuellement passer par du JSON_TABLE si cela existe en pgsql (DELETE FROM ants WHERE uuid IN (SELECT id FROM JSON_TABLE(:in COLUMN id INT UNSIGNED) AS t) un truc du genre).
Bon, cela dit, ça me choque en fait moins dans le cas du "in" car la query est variable parce que le nb d'élément l'est. Mais dans l'autre exemple, c'est carrément le nom du placeholder qui est variable, et là, j'ai perso bien plus de mal : )
PS: tu peux utiliser $ants = array_column($ants, 'uuid') plutôt qu'un array map. Et perso, je ne toucherai pas aux variables d'entrée, je les considèrerai un peu comme "final" si c'était du java (et je trouve en fait encore plus gênant de pouvoir passer pifométriquemment des objets ou des ids à cette méthode... j'aurai pris l'un ou l'autre, point, quitte à rajouter un deleteManyUuid(...) ou un deleteManyObject(...) pour faire la distinction). Tant qu'à faire, du coup, si tu gardes des objets, mieux vaut vérifier leur typage, plutôt que l'existence d'un uuid if ($ants[0] instanceof Ants) plutôt, pour ne pas passer un autre objet (qui aurait aussi le champ uuid mais qui ne serait pas une ant)?
Après, je n'ai perso pas tellement ce problème, puisqu'étant dans une procédure stockée, je peux boucler du DELETE FROM ants WHERE id = :id pour chaque id. TU peux éventuellement passer par du JSON_TABLE si cela existe en pgsql (DELETE FROM ants WHERE uuid IN (SELECT id FROM JSON_TABLE(:in COLUMN id INT UNSIGNED) AS t) un truc du genre).
Bon, cela dit, ça me choque en fait moins dans le cas du "in" car la query est variable parce que le nb d'élément l'est. Mais dans l'autre exemple, c'est carrément le nom du placeholder qui est variable, et là, j'ai perso bien plus de mal : )
PS: tu peux utiliser $ants = array_column($ants, 'uuid') plutôt qu'un array map. Et perso, je ne toucherai pas aux variables d'entrée, je les considèrerai un peu comme "final" si c'était du java (et je trouve en fait encore plus gênant de pouvoir passer pifométriquemment des objets ou des ids à cette méthode... j'aurai pris l'un ou l'autre, point, quitte à rajouter un deleteManyUuid(...) ou un deleteManyObject(...) pour faire la distinction). Tant qu'à faire, du coup, si tu gardes des objets, mieux vaut vérifier leur typage, plutôt que l'existence d'un uuid if ($ants[0] instanceof Ants) plutôt, pour ne pas passer un autre objet (qui aurait aussi le champ uuid mais qui ne serait pas une ant)?