Doktrini: Henüz DB yoktur sadece koleksiyon öğeleri kurtarmak için nasıl

2 Cevap php

Ben veritabanına kaydetmek için öğelerin bir koleksiyonu var, ama kayıt var değil sadece takılı olmak istiyorum.

Ben en etkili yolu kaydetmeden önce koleksiyonunu filtre olacağını düşünüyorum. Doktrin bunu otomatik olarak yapabilir miyim?

Yoksa koleksiyondaki tüm öğelerin tüm id en, daha sonra bu kimliği yılların listesinde mevcut olmayan öğeler için veritabanını sorgulamak almak zorundadır, o foreachta biz gerekmez tüm koleksiyon öğeleri kaldırmak, ve nihayet koleksiyonu kaydetmek?

Herhangi bir iyi bir yaklaşım önerdi?

2 Cevap

Bu Doctrine_Collection sınıfından kurtarmak fonksiyonu

 public function save(Doctrine_Connection $conn = null, $processDiff = true)
    {
        if ($conn == null) {
            $conn = $this->_table->getConnection();
        }

        try {
            $conn->beginInternalTransaction();

            $conn->transaction->addCollection($this);

            if ($processDiff) {
                $this->processDiff();
            }

            foreach ($this->getData() as $key => $record) {
                $record->save($conn);
            }

            $conn->commit();
        } catch (Exception $e) {
            $conn->rollback();
            throw $e;
        }

        return $this;
    }

Ben bunu elle inşa eğer koleksiyonunuzu alıyorsanız, ya da nerede emin değilim, ama Doctrine_Collection sınıfını genişleten ve bu gibi saklama işlevini yüklenme denemek isteyebilirsiniz

<?php

class My_Collection extends Doctrine Collection
{

  public function save(Doctrine_Connection $conn = null, $processDiff = true, $createOnly = true)
    {
        if ($conn == null) {
            $conn = $this->_table->getConnection();
        }

        try {
            $conn->beginInternalTransaction();

            $conn->transaction->addCollection($this);

            if ($processDiff) {
                $this->processDiff();
            }

            foreach ($this->getData() as $key => $record) {

                if($createOnly)
                {
                    if ($record->exists())
                    {
                        $record->save($conn);
                    }
                }else{
                    $record->save($conn);
                }
            }

            $conn->commit();
        } catch (Exception $e) {
            $conn->rollback();
            throw $e;
        }

        return $this;
    }

}

Doktrin hakkında hiçbir şey bilmiyorum, ama MySQL REPLACE sorgu sadece yapar ne istediğinizi - güncellemeler mevcut satırların & birincil anahtar sonuç bulunamadı ise yeni bir satır oluşturur.