• Реализация шаблона Identity Map в Yii Framework

    Доброго времени суток, хабрасообщество!

    Проблема


    При работе с базой данных или просто с объектами, доступными из разных частей вашего приложения, есть опасность, что объекты, которые, казалось бы, должны быть равны вовсе таковыми не являются.

    Например, допустим, у нас есть некоторая модель ActiveRecord — Expence и вот такой код:
    $modelOne = Expence::model()->findByPk(10);
    $modelTwo = Expence::model()->findByPk(10);
    var_dump($modelOne === $modelTwo); // Вернет false

    Таким образом, меняя одну модель мы никоим образом не затронем вторую(что логично, так как они ссылаются на разные объекты).
    $modelOne->someField = "Data";
    $modelOne->save();
    /// ...какой-то код...
    echo $modelTwo->someField; // Содержит старое значение
    $modelTwo->save(); // Затираем ранее записаные данные
    

    Читать дальше →