Tilfellet med doctrine2, symfony2 og PostgreSQL enheter

stemmer
4

Jeg har et problem med doctrine2 i symfony2 app med postgres database.

Jeg får feilmeldingen:

SQLSTATE[3F000]: Invalid schema name: 7 ERROR: schema main does not exist 

Problemet er at min skjema er Hoved ikke hoved. Når jeg endre navnet, happends lignende ting på bordet forhold:

SQLSTATE[42P01]: Undefined table: 7 ERROR: relation main.brand_brandid_seq does not exist 

Problemet er store og små bokstaver, og jeg tror kanskje det har noe å gjøre med å sitere eller noen doktrine konfigurasjon.

Entity:

namespace MyB\Entity;

/**
 * MyB\Entity\Brand
 *
 * @orm:Table(name=Main.Brand)
 * @orm:Entity
 */
class Brand
{
    /**
     * @var integer $brandid
     *
     * @orm:Column(name=BrandId, type=integer, nullable=false)
     * @orm:Id
     * @orm:GeneratedValue(strategy=SEQUENCE)
     * @orm:SequenceGenerator(sequenceName=Main.Brand_BrandId_seq, allocationSize=1, initialValue=1)
     */
    private $brandid;

    /**
     * @var string $brandname
     *
     * @orm:Column(name=BrandName, type=string, length=32, nullable=false)
     */
    private $brandname;

    /**
     * Set name.
     *
     * @param string $name
     */
    public function setName($name) {
        $this->brandname = $name;
    }
}

skjema:

SET search_path = Main, pg_catalog;

CREATE SEQUENCE Brand_BrandId_seq
    START WITH 2
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;


SET default_tablespace = '';

SET default_with_oids = false;


CREATE TABLE Brand (
    BrandId integer DEFAULT nextval('Brand_BrandId_seq'::regclass) NOT NULL,
    BrandName character varying(32) NOT NULL
);

Controller:

        $reseller = new \MyB\Entity\Brand();
        $reseller->setName('Sasa');

        $em = $this->get('doctrine.orm.entity_manager');
        $em->persist($reseller);
        $em->flush();

Noen ide?

Publisert på 06/04/2011 klokken 22:45
kilden bruker
På andre språk...                            


4 svar

stemmer
4

Prøv dette

namespace MyB\Entity;

/**
 * MyB\Entity\Brand
 *
 * @orm:Table(name="""Main"".""Brand""")
 * @orm:Entity
 */
class Brand
{
    /**
     * @var integer $brandid
     *
     * @orm:Column(name="""BrandId""", type="integer", nullable=false)
     * @orm:Id
     * @orm:GeneratedValue(strategy="SEQUENCE")
     * @orm:SequenceGenerator(sequenceName="""Main"".""Brand_BrandId_seq""", allocationSize="1", initialValue="1")
     */
    private $brandid;

    /**
     * @var string $brandname
     *
     * @orm:Column(name="""BrandName""", type="string", length=32, nullable=false)
     */
    private $brandname;

    /**
     * Set name.
     *
     * @param string $name
     */
    public function setName($name) {
        $this->brandname = $name;
    }
}

I Postgres hvert ord og små bokstaver må være flukt.

Svarte 07/04/2011 kl. 05:56
kilden bruker

stemmer
1

Ved bruk av rømt tabellnavn ta hånd om denne "bug": https://github.com/doctrine/doctrine2/pull/615 . Lære tar det første tegnet av tabellen navn som aliasprefix og dermed et sitat er brukt, knusing alle dine SQLs

Svarte 24/12/2013 kl. 11:13
kilden bruker

stemmer
0

Hvis du bruker migreringsfilene på Laravel. Endre Schema :: bordet for å Schema :: skape. Dette kan hjelpe noen.

Svarte 02/12/2015 kl. 08:56
kilden bruker

stemmer
0

Jeg skriver PpSqlBundle men det er ikke ferdig ennå, men du kan prøve, jeg tror det skal fungere. Det kan generere skjema db samme som i symfony. i config.yml du bør ha:

doctrine:
dbal:
    default_connection: default
    connections:
        default:
            driver:   
            dbname:   
            host:     
            user:     
            password: 
            driverClass: PgSqlBundle\Doctrine\DBAL\Driver\PDOPgSql\Driver # it's important
            logging:  

og du bør bruke kommandoen

app/console doctrine:mapping:import Yourbundlename annotation

https://github.com/mstrzele/PgSqlBundle

Svarte 07/04/2011 kl. 06:59
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more