A modelinde B ilişkisi bildirildiğinde, B nesnesini, $ a-> B olarak çağırdığınızda veritabanından "tembel yüklendi" olarak anlıyoruz. Önbelleğe alınmadığı sürece (ki bunu varsayılan olarak düşünmüyorum) bu ilişkiyi her aradığınızda B kopyasının yeni bir kopyasını almalı.
Eğer doSomething() B içindeki verileri değiştiriyorsa, bunu B-> doSomething() içinde $ this-> save() olarak adlandırırsınız. B'yi değiştiriyor ancak değişiklikleri kaydetmiyorsanız, B için tekrar sorguladığınızda, aynı eski içeriğe sahip olacaktır.
<?php
function doSomething() {
$this->my_data++; // change something
$this->save(); // save the changes
}
?>
siz değiştirmediğiniz sonra tekrar B erişmek istediğiniz ama bunu kaydetmiş önce, sen tür, "cache" kendisine bir bir değişkende ayarlamak gerekecektir. Aksi takdirde, $ a-> B (ve doSomething() içindeki değişikliği kaydetmediğinizde) veritabanından yeni bir kopyasını aldığından, eski verilere sahip olacaksınız. Böyle bir şey yerine çalışacaktır:
<?php
$a = A::model()->findByPK(1);
$B = $a->B; // save B
$B->doSomething(); // change B
$B->doSomething(); // change the changed B again
$B->save(); // save both changes
?>
o (size "başka bir kullanıcı tarafından değiştiğini" derken olabilir öyle gibi) genel eşzamanlılık sorunu ise, kilidin çeşit uygulamak gerekebilir Veri bütünlüğünü sağlamak için mekanizmayı veya mySql işlemlerini (Yii'nin CDbTransaction yoluyla) kullanın.
bunların hiçbiri belki şöyle yanı sorununuzu çözecektir bir "hevesli" yük yapıyor, çalışıyorsa:
<?php
$posts=A::model()->with('B')->findAll();
?>
Yii dahil olmak üzere tüm doğal ilişkilerin tümünü yenilemek için ilişkiler önbelleğe alınır. –