Just found the solution myself, adding it here and also on Stackoverflow:
The problem was I was extending the wrong class. Because symfony is not
using Doctrine's original command at:
\Doctrine\ORM\Tools\Console\Command\SchemaTool\UpdateCommand
Instead it uses the one from the bundle, located at:
\Doctrine\Bundle\DoctrineBundle\Command\Proxy\UpdateSchemaDoctrineCommand
So basically the end result would
be src/Webscoming/CoreBundle/Command/DoctrineUpdateCommand.php:
<?php
namespace Webscoming\CoreBundle\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Doctrine\ORM\Tools\SchemaTool;
class DoctrineUpdateCommand extends \Doctrine\Bundle\DoctrineBundle\Command\
Proxy\UpdateSchemaDoctrineCommand {
protected $ignoredEntities = array(
'Webscoming\CoreBundle\Entity\AuctionExpress'
);
protected function executeSchemaCommand(InputInterface $input,
OutputInterface $output, SchemaTool $schemaTool, array $metadatas) {
/** @var $metadata \Doctrine\ORM\Mapping\ClassMetadata */
$newMetadatas = array();
foreach ($metadatas as $metadata) {
if (!in_array($metadata->getName(), $this->ignoredEntities)) {
array_push($newMetadatas, $metadata);
}
}
parent::executeSchemaCommand($input, $output, $schemaTool, $newMetadatas
);
}
}
Hope it helps someone! I've lost a couple of hours to figure this.
On Saturday, September 20, 2014 2:22:24 PM UTC+2, Alexandru Trandafir
Catalin wrote:
>
> Hey there,
>
> I'm trying to extend the update command of doctrine in Symfony2 and I get
> this error:
> [InvalidArgumentException]
> The helper "em" is not defined.
>
> The code I've got is this:
>
> In src/Webscoming/CoreBundle/Command/DoctrineUpdateCommand.php:
>
> <?php
>
>
> namespace Webscoming\CoreBundle\Command;
>
>
> use Symfony\Component\Console\Input\InputOption;
> use Symfony\Component\Console\Input\InputArgument;
> use Symfony\Component\Console\Input\InputInterface;
> use Symfony\Component\Console\Output\OutputInterface;
> use Doctrine\ORM\Tools\SchemaTool;
>
>
> class DoctrineUpdateCommand extends \Doctrine\ORM\Tools\Console\Command\
> SchemaTool\UpdateCommand {
>
>
> protected $name = 'orm:schema-tool:myupdate';
> protected $ignoredEntities = array(
> 'Entity\Asset\Name'
> );
>
>
> protected function executeSchemaCommand(InputInterface $input,
> OutputInterface $output, SchemaTool $schemaTool, array $metadatas) {
> /** @var $metadata \Doctrine\ORM\Mapping\ClassMetadata */
> $newMetadatas = array();
> foreach ($metadatas as $metadata) {
> if (!in_array($metadata->getName(), $this->ignoredEntities)) {
> array_push($newMetadatas, $metadata);
> }
> }
>
>
> parent::executeSchemaCommand($input, $output, $schemaTool,
> $newMetadatas);
> }
>
>
> }
>
> Any idea what am I missing? I'm following this post on Stackoverflow but
> it seems I'm doing something wrong:
>
> http://stackoverflow.com/questions/12563005/ignore-a-doctrine2-entity-when-running-schema-manager-update
>
> Thanks!
>
> On Tuesday, September 25, 2012 9:53:17 AM UTC+2, Marco Pivetta wrote:
>>
>> As you can see at
>> https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/AbstractCommand.php#L45-53
>>
>> , the schema-tool CLI command (
>> https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/UpdateCommand.php
>>
>> ) uses all the metadata collected across your mapping drivers.
>>
>> If you want to exclude particular classes, you may want to extend
>> UpdateCommand so that it picks only metadata suiting your needs.
>>
>> You can then attach your command to your CLI and use that one instead of
>> the one packaged with Doctrine2
>>
>> Marco Pivetta
>>
>> http://twitter.com/Ocramius
>>
>> http://marco-pivetta.com
>>
>>
>>
>> On 25 September 2012 09:42, Chris Ramakers <[email protected]> wrote:
>>
>>> I've got a Doctrine Entity defined that maps to a View in my database.
>>> All works fine, the Entity relations work fine as expected.
>>>
>>> Problem now is that when running orm:schema-manager:update on the
>>> commandline a table gets created for this entity which is something I want
>>> to prevent. There already is a view for this Entity, no need to create a
>>> table for it.
>>>
>>> Can I annotate the Entity so that a table won't be created while still
>>> keeping access to all Entity related functionality (associations, ...)? Or
>>> is it possible to do this with a plugin, listener, ...?
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "doctrine-user" group.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msg/doctrine-user/-/8Gs3ZUwvob8J.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected].
>>> For more options, visit this group at
>>> http://groups.google.com/group/doctrine-user?hl=en.
>>>
>>
>>
--
You received this message because you are subscribed to the Google Groups
"doctrine-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/doctrine-user.
For more options, visit https://groups.google.com/d/optout.