Поведение доктрины, если бы я делал это так, было бы правильно? - PullRequest
1 голос
/ 01 марта 2011


Я делаю веб-приложение в ZF + Doctrine 1.2.3, но у меня была старая база данных,

, у нее была довольно хорошая структура, поэтому я думаю, что могу перепроектировать ее с помощью доктрины запятых

./doctrine generate-models-db,

Удивительно, но я остановился, когда захотел использовать некоторые доктрины поведения, такие как: searchable в качестве примера.

Мой вопрос: пошел ли ямоя модель и добавил эти две строки:

$this->actAs('Searchable', array(
  'fields' => array('title', 'content')
   )
);

Я не уверен, что этого достаточно и будет работать, как ожидалось.Если у вас есть какие-либо дополнительные советы по созданию других поведений (например, versionable, i18n, sluggable или soft delete) вручную или обратному инжинирингу с учением о поведении, не могли бы вы перечислить их?

Ответы [ 2 ]

0 голосов
/ 03 марта 2011

Простое добавление

$this->actAs('Searchable', array(
'fields' => array('title', 'content')
 )
);

недостаточно. Я никогда не использовал его сам, но если вы посмотрите на документы , вы увидите, что он генерирует другую таблицу для индекса.

CREATE TABLE job_index (id BIGINT, 
keyword VARCHAR(200), 
field VARCHAR(50), 
position BIGINT, 
PRIMARY KEY(id, keyword, field, position)) ENGINE = INNODB

для определения модели типа

class Job extends Doctrine_Record
{
    public function setUp()
    {
        $this->actAs('Searchable', array(
                'fields' => array('title', 'content')
            )
        );
    }
 //....more methods
}

Если вам нужен быстрый поиск, который делает больше, чем может сделать Doctrine, вы должны посмотреть на поиск на уровне данных с полнотекстовым поиском или даже с внешним решением, таким как Lucene (с дополнительным Solr) Doctrine Searchable Behavior vs Zend Lucene в symfony может дать вам больше информации об этом. Если у вас есть много данных для поиска и вам необходим точный контроль, вам следует очень внимательно изучить Lucene, поскольку в большинстве случаев он превзойдет решение MySQL / Doctrine.

0 голосов
/ 02 марта 2011

Вы хотите провести обратный инжиниринг своей базы данных, а затем использовать такие варианты поведения, как поиск?

Для начала вы можете сгенерировать файл YAML из существующей схемы БД, используя задачу CLI «generate-yaml-db». После этого вы можете установить отношения и добавить необходимые поведения, такие как Timestampable, Searchable или вы можете развернуть свое собственное. Как только все это будет сделано, вы можете сгенерировать модели, используя задачу CLI «generate-models-yaml».

Если вы добавили поведение или внесли какие-либо изменения в схему, вы можете сгенерировать diff diff «generate-migrations-diff». Это создает классы миграции, которые можно использовать для применения новых изменений, внесенных в файл YAML, в базу данных. Запустите задачу CLI «перенос», чтобы применить изменения к базе данных.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...