2016-04-11 17 views
0

Bir alanı diğer alanın değeriyle nasıl güncelleştirebilirim? Örneğin, ben (o klonlama alanları gibi) alanı created_at değeriyle updated_at alanını güncelleştirmek istediğinizalanı diğer alanın değeriyle güncelleştirin

$dm->createQueryBuilder('MyBundle:MyService') 
      ->update() 
      ->multiple(true) 
      ->field('updated_at')->set(CREATED_AT_ATRIBUTE) 
      ->getQuery() 
      ->execute(); 

Teşekkür

+0

belki bir toplama ile ?? – Fran

cevap

0

Seçenek # 1: Uygulama yan güncelleme

Doctrine ODM kullanılırken en kolay yaklaşım, uygulama tarafında güncellemeyi gerçekleştirmektir. Böylece, güncellemek istediğiniz tüm nesneleri getirin, gerekli ayarlamaları yapın ve bunları temizleyin.

$services = $dm->createQueryBuilder('MyBundle:MyService') 
    ->getQuery() 
    ->execute(); 

foreach ($services as $service) { 
    $service->setUpdatedAt($service->getCreatedAt()); 
} 

$db->flush(); 

$services

sen yineleme gibi belgeleri alıp bunu Mongo imleci temsil eder. Tüm belgeleri bir kerede koleksiyondan almak istiyorsanız eagerCursor değerini true'a ayarlayabilirsiniz.

Seçenek # 2: Veritabanı yan güncelleme Ayrıca veritabanının kendisi doğrudan güncelleştirme yapabilir

. Ancak bunu yapmak için, sorgu oluşturucu bu işlevi desteklemediğinden sorguyu kendiniz oluşturmanız gerekir. Eğer güncelleme daha fazla kontrol gerekiyorsa orada biraz daha mantık ekleyebilirsiniz böylece

// Get MongoDB instance from DocumentManager 
$mongo = $dm->getDocumentDatabase('Fully/Qualified/Class/Name') 
    ->getMongoDB(); 

// Iterate over the collection and update each document 
$mongo->execute(' 
    db.MyServiceCollection.find().forEach(function (item) { 
     db.MyServiceCollection.update(
      {_id: item._id}, 
      {$set: {updated_at: item.created_at}} 
     ); 
    }); 
'); 

forEach kullanılan fonksiyon, sadece normal bir javascript fonksiyonudur.

İlgili konular