Orm: DDC-2788: Create Table If Not Exists - doctrine:schema:update

Created on 11 Nov 2013  路  9Comments  路  Source: doctrine/orm

Jira issue originally created by user jayem:

I am not positive if this issue is in the correct project. Sorry if I placed it in the wrong area.

I was wondering if it would be possible to have the doctrine:schema:update command updated to use CREATE IF NOT EXISTS for tables that already exist.

For example, here is my setup:

    /****
     * The relationship between an author and its associated book entities.
     *
     * @ORM\ManyToMany(targetEntity="Book")
     * @ORM\JoinTable(name="authors_books",
     *     joinColumns={@ORM\JoinColumn(name="book_id", referencedColumnName="id")},
     *     inverseJoinColumns={@ORM\JoinColumn(name="author_id", referencedColumnName="id")}
     * )
     */
    protected $books;

The above code is an example, so the exact column names may not be 100% correct. The import aspect is the join table name. If that table already exists in the database, I will get the following error when I run the doctrine:schema:update --dump-sql command:

{quote}
[Doctrine\DBAL\Schema\SchemaException]
The table with the name 'authors_books' already exists.
{quote}

This is because it is trying to CREATE TABLE 'authors*books' and that table is already in the database. Could the command instead use CREATE TABLE IF NOT EXISTS 'authors*books' when "IF NOT EXISTS" is available for the configured database type?

Thanks!

Improvement Won't Fix

All 9 comments

Comment created by finalcode:

you can reference this question, http://stackoverflow.com/questions/3220998/check-for-table-existence-before-dropping

Problem is continuing since 2013? We must resolve this issue.

Didn't notice this issue before. This is a no-go.

If the table exists, yet doctrine fails to recognize that, then there is some sort of issue with the setup.

Doctrine should just produce a CREATE TABLE and cause a hard failure here. Using CREATE TABLE IF NOT EXISTS (or equivalent - note that DB2 has no such construct!) just means introducing silent failures everywhere.

Closing as won't fix.

https://github.com/doctrine/doctrine2/issues/6016
Issue is continuing. We didn't use many-to-many with latest version of doctrine.
We get this error on three tables like book, author, book_author.

That's a symptom of a different problem. Fixing it via IF NOT EXISTS would just be shotgun surgery. The source problem is that doctrine doesn't see your tables - find out the "why" first :-)

Thank you for your fast reply. You are saying this problem is not general, and only related for my codes/tables?
For hours I'm inspecting around /lib/Doctrine/DBAL/Schema/Schema.php
to resolve this.

If the table exists, yet doctrine still tries to create it, then:

  • doctrine probably didn't see the table
  • it's on a different schema
  • it is not visible to the currently connected user
  • doctrine may have recognized it with an incorrect name

And yes, this requires some manual debugging, sorry :-\

This error only when I using many-to-many relation. I think this was about association mapping engine of doctrine. How do i profile this error on doctrine:schema:update command?

Was this page helpful?
0 / 5 - 0 ratings