Skip to content
This repository was archived by the owner on Jan 24, 2024. It is now read-only.
This repository was archived by the owner on Jan 24, 2024. It is now read-only.

Feature request: REPLACE INTO statment #29

@vGhost2000

Description

@vGhost2000

Feature request: REPLACE INTO выражения

К имеющимся в орм SELECT, INSERT, UPDATE, DELETE выражениям добавить так же REPLACE выражение, полностью повторяющее INSERT выражение за исключением первого слова в запросе. Использоваться одно должно в следующем случае, если при создании новой сущности будет явно задан первичный ключ (возможно так же если задан уникальный ключ). Например:

$e = new SomeEntity;
$e->id = 123; // где id это PK
$e->someField = 'someValue';
$transaction->persisit($e);
$transaction->run();

В данном случае вместо INSERT INTO, должно быть использовано выражение REPLACE INTO, в остальном отличия от insert нету.

Либо, можно посмотреть как решаются такие кейсы в других орм, в некоторых, к примеру, есть метод ->replace(), который форсированно заставляет орм делать REPLACE INTO запрос вместо INSERT INTO. Это был бы более интуитивно понятный вариант. Вообще я предложил бы реализовать такие методы, скажем persist это аналог ->save() из других орм, а рядом с ним реализовать так же методы ->update(), ->replace() и ->create() которые форсированно заставляют делать UPDATE / REPLACE / INSERT соответственно, в то время как ->persist() действует по выше описанной логике, т.е. сам автоматически выбирает между REPLACE / INSERT / UPDATE.

Feature request: REPLACE INTO expressions

To the expressions in the SELECT, INSERT, UPDATE, DELETE expressions, add the REPLACE expression, which repeats the INSERT expression except for the first word in the query. One should be used in the following case, when creating a new entity, a primary key will be explicitly specified (possibly also if a unique key is specified). For instance:

$e = new SomeEntity;
$e->id = 123; // where id is PK
$e->someField = 'someValue';
$transaction->persisit($e);
$transaction->run();

In this case, instead of INSERT INTO, the REPLACE INTO expression should be used, otherwise there is no difference from insert.

Or, you can see how such cases are solved in other orm, in some, for example, there is a method ->replace(), which forces the orm to make a REPLACE INTO request instead of INSERT INTO. This would be a more intuitive option. In general, I would suggest implementing such methods, say persist is an analogue ->save() from other orm, and next to it, implement the same methods ->update (), ->replace() and ->create() which force to do UPDATE / REPLACE / INSERT respectively, while ->persist() acts according to the logic described above, i.e. it automatically chooses between REPLACE / INSERT / UPDATE.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions