Bir tablo Doktrini birden salyangozlar alabilir miyim?

2 Cevap php

Bu Doktrini bir tabloda birden salyangozlar olması mümkün mü?

Benim yaml-dosyasında bu çalıştı:

Article:
  tableName: tst_article
  actAs:
     Sluggable:
       unique: true
       fields: [title]
       canUpdate: true
     Sluggable:
       unique: true
       fields: [text]
       name: secondSlug
  columns:
    id:
      type: integer(8)
      primary: true
      autoincrement: true
    category_id:
      type: integer(8)
    title:
      type: text(255)
    text:
      type: clob

Ama sql oluşturduktan sonra sadece secondSlug oluşturulan ...

2 Cevap

Mümkündür. Tablo tanım write:

public function setUp() {
    parent::setUp();

    $sluggable0 = new Doctrine_Template_Sluggable(array(
        'fields' => array(0 => 'name'),
        'unique' => true,
        'canUpdate' => true
    ));
    $this->actAs($sluggable0);

    $sluggable1 = new Doctrine_Template_Sluggable(array(
        'fields' => array(0 => 'native_name'),
        'unique' => false,
        'canUpdate' => false,
        'name' => 'native_name_slug'
    ));
    $this->actAs($sluggable1);
}

Sorun YAML kendisidir. Böyle bir şey var:

keyA:
  keyB: value
  keyB: value

: Tercüme olabilir ne

array(
    'keyA' => array(
        'keyB' => 'value',
        'keyB' => 'value'
    )
);

Eğer orada keyB tanımı ve Gördüğünüz gibi keyB yeni değeri yazılır. Yani YAML dosyasında ikinci tanım ilk geçersiz kılar.

Bunu çözmek için? Bilmiyorum, ama bazı araştırmalar yapacağım. Şu anda saf PHP Modellerinizi bildirmek zorunda konum.

Değişen kütüphaneler tavsiye edilmese de, bazen bu gerekli bir kötülük var. Çok küçük bir değişiklik size YAML vb, Sluggable_1, Sluggable_2 bildirebilirsiniz.

--- a/lib/vendor/doctrine/Doctrine/Import/Builder.php
+++ b/lib/vendor/doctrine/Doctrine/Import/Builder.php
@@ -711,8 +711,10 @@ class Doctrine_Import_Builder extends Doctrine_Builder
     {
         // find class matching $name
         $classname = $name;
-        if (class_exists("Doctrine_Template_$name", true)) {
-            $classname = "Doctrine_Template_$name";
+        // HACK to allow multiple Sluggables
+        $classname = preg_replace('/_[0-9]+$/', '', $classname);
+        if (class_exists("Doctrine_Template_$classname", true)) {
+            $classname = "Doctrine_Template_$classname";
         }
         return "        \$" . strtolower($name) . "$level = new $classname($option);". PHP_EOL;
     }