06-04-2020, 03:14 PM
L'autre exemple quasi-complet(juste le bout pour la création de la requête), qui est régis par les mêmes règles que le in c'est à dire nombre de paramètre variable:
La solution du JSON est envisageable, je vais m'y intéresser car ce type de requête va être parsemé dans mon code donc je prends toute bonne idée
public static function createMany(City $city, Array $ants)
{
// Data shared by all the inserts
$data['city_uuid'] = $city->uuid;
$data['position'] = DB:anitizePoint($city->position);
$data['dev_duration'] = $bindings = $city->buildings->royal_room->nurseryDevelopmentTimes()['end'];
$data['offset'] = $city->buildings->royal_room->getLevelFor('born_time_offset');
$sql = '';
foreach ($ants as $index => $ant) {
$data["caste_{$index}"] = $ant['caste'];
$data["index_{$index}"] = $index;
$will_die_statement = isset($ant['will_die']) && $ant['will_die'] ? "NOW() + CONCAT(FLOOR(RANDOM() * {$data['dev_duration']})::INT, ' MINUTES')::INTERVAL" : 'NULL';
$sql .= "(:city_uuid, ST_GeomFromText(:position, 4326), NOW() + CONCAT(:dev_duration::INT,' MINUTES ', :index_{$index}::INT * :offset::INT, ' SECONDS')::INTERVAL, :caste_{$index}, {$will_die_statement}),";
}
// Create the full SQL Statement
$sql = 'INSERT INTO ants (city_uuid, position, born_time, caste, dead_time) VALUES ' . substr($sql, 0, -1) . ' RETURNING *, ST_X(position) as x, ST_Y(position) as y';
$insertion = DB::insertReturn($sql, $data);
La solution du JSON est envisageable, je vais m'y intéresser car ce type de requête va être parsemé dans mon code donc je prends toute bonne idée