Kohana ORM. Прикол при добавлении связи

kohana
Мы все знаем, что для добавления связи много-ко-многим используется функция ORM add().

Но что делать, если объект только что создан? Тогда есть проблемка.

Вот практический пример:

// Создаём  пользователя
$user = ORM::factory("user");
$user->id = 123123;
$user->name = "Username";
$user->email = "asd@asdasd.asd";
$user->password = "PaSsWoRd";
$user->save();

// Даём роль
$user->add("roles",ORM::factory("role",1));

Вроде всё делаем правильно, однако мы получим ошибку:

Database_Exception [ 1048 ]: 
Column 'user_id' cannot be null 
[ INSERT INTO `roles_users` (`user_id`, `role_id`) VALUES (NULL, '1') ] 
~ MODPATH/database/classes/kohana/database/mysql.php [ 194 ]

Забавная ошибка. Объект создан и сохранён. Но тем не менее ORM не может найти id пользователя! Попробуйте запросить $user->id сразу после создания объекта, и вы его получите. И более того, я явно присваиваю id, до сохранения. Но ORM не находит. Мистика, однако!

Построенная таким образом модель, какая-то не полная и чего-то ей не хватает. Совсем другое дело, если ещё раз запросить объект.

Вот пример:

// Создаём  пользователя
$user = ORM::factory("user");
$user->id = 123123;
$user->name = "Username";
$user->email = "asd@asdasd.asd";
$user->password = "PaSsWoRd";
$user->save();

//  Сначала переопределяем объект
$user = ORM::factory("user",$cms_user->id);

// А вот теперь уже даём роль
$user->add("roles",ORM::factory("role",1));

И так — всё работает.

Проблема решена, всё работает, но как-то по-дурацки. Кто знает, как можно сделать это красивее?

UPD: Речь про Kohana 3.2
UPD2: Глюк и правда странный, тем более что модель и правда немного модифицировалась, возможно автор сам дурак.

Kohana ORM. Прикол при добавлении связи: 5 комментариев

  1. amberlex

    Kohana 3.3. Этот код сработал без проблем:

    // Создаём пользователя
    $user = ORM::factory(«User»);
    $user->id = 123124;
    $user->username = «xxxxx2″;
    $user->email = «asd2@asdasd.asd»;
    $user->password = «PaSsWoRd»;
    $user->save();

    // Даём роль
    $user->add(«roles»,ORM::factory(«Role», 1));

  2. amberlex

    Kohana 3.2.2 Странно, но тоже без проблем:

    // Создаём пользователя
    $user = ORM::factory(‘User’);
    $user->id = 123125;
    $user->username = ‘xxxxx2′;
    $user->email = ‘asd2@asdasd.asd’;
    $user->password = ‘PaSsWoRd’;
    $user->save();

    // Даём роль
    $user->add(‘roles’,ORM::factory(‘Role’, 1));

  3. amberlex

    Может вы расширяли класс ORM и че-то нарушили?

Комментарии запрещены.