Skip to content

Ошибка сохранения коллекций #230

@bassta

Description

@bassta

Столкнулся с непонятным поведением при сохранении коллекций.

Есть 2 тестовых класса:

        <class name="Bar" type="final">
            <properties>
                <identifier />
                <property name="foos" type="Foo" relation="OneToMany" />
            </properties>
            <pattern name="StraightMapping" />
        </class>

        <class name="Foo" type="final">
            <properties>
                <identifier />
                <property name="bar" type="Bar" relation="OneToOne" />
            </properties>
            <pattern name="StraightMapping" />
        </class>

И такой вот тест:

    $bar = Bar::create();
    $bar = $bar->dao()->add($bar);

    $foo = Foo::create();
    $foo->dao()->add($foo);

    $bar->getFoos()->
        fetch()->
        setList(array($foo))->
        save();

По идее, при выполнении метода save, должно произойти обновление записей в таблице foo. Но на самом деле происходит добавление новых записей. Причем поле связи bar_id, которое должно содержать id записи из таблицы bar остается пустым. Т.е. $bar->getFoos()->getList() вернет пустой список.

Вот что пишет в лог Postgres:

select nextval('bar_id') as seq
INSERT INTO "bar" ("id") VALUES ('17')
select nextval('foo_id') as seq
INSERT INTO "foo" ("id", "bar_id") VALUES ('27', NULL)
SELECT "foo"."id", "foo"."bar_id" FROM "foo" WHERE ("foo"."bar_id" = '17')
begin;
select nextval('foo_id') as seq
INSERT INTO "foo" ("id", "bar_id") VALUES ('28', NULL)
commit;

А вот что пишет в лог MySql:

INSERT INTO `bar` (`id`) VALUES (NULL)
INSERT INTO `foo` (`id`, `bar_id`) VALUES (NULL, NULL)
SELECT `foo`.`id`, `foo`.`bar_id` FROM `foo` WHERE (`foo`.`bar_id` = '19')
begin
INSERT INTO `foo` (`id`, `bar_id`) VALUES (NULL, NULL)
commit

Пробовал в ветках 1.0, 1.1, master - везде одинаковое поведение.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions