[DDC-2425] Parent entity sometimes fails to load when validating/updating schema. Created: 03/May/13 Updated: 03/May/13 Resolved: 03/May/13 |
|
| Status: | Resolved |
| Project: | Doctrine 2 - ORM |
| Component/s: | None |
| Affects Version/s: | None |
| Fix Version/s: | None |
| Security Level: | All |
| Type: | Bug | Priority: | Trivial |
| Reporter: | Scott Gibson | Assignee: | Benjamin Eberlei |
| Resolution: | Invalid | Votes: | 0 |
| Labels: | Cli, orm, schematool | ||
| Environment: |
Debian 6.0.6 x64 |
||
| Description |
|
Should not have reported, was a stupid mistake on my part. |
[DDC-2421] Many-To-Many relation creation failed when using non PK entity field Created: 29/Apr/13 Updated: 01/May/13 Resolved: 01/May/13 |
|
| Status: | Resolved |
| Project: | Doctrine 2 - ORM |
| Component/s: | Mapping Drivers, Tools |
| Affects Version/s: | Git Master, 2.3.3 |
| Fix Version/s: | None |
| Security Level: | All |
| Type: | Bug | Priority: | Major |
| Reporter: | Bruno CHALOPIN | Assignee: | Benjamin Eberlei |
| Resolution: | Invalid | Votes: | 0 |
| Labels: | schematool | ||
| Environment: |
Ubuntu linux 12.04, php 5.4.9 |
||
| Description |
|
Given these entities : /** * Class Domain * * @ORM\Entity * @ORM\Table(name="profils_domains") */ class Domain { /** * @var string * * @ORM\Id * @ORM\Column(type="string", length=22, nullable=false) */ protected $name = ''; } /** * Class Web * * @ORM\Entity * @ORM\Table(name="profils_webs", * uniqueConstraints={@ORM\UniqueConstraint(name="web_unique",columns={"name", "domain"})} * ) */ class Web { /** * @var integer * * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer", nullable=false) */ protected $id; /** * @var string * * @ORM\Column(type="string", length=22, nullable=false) */ protected $name = ''; /** * @var Domain * * @ORM\ManyToOne(targetEntity="Domain", fetch="LAZY") * @ORM\JoinColumn(name="domain", referencedColumnName="name", nullable=false, onDelete="CASCADE") */ protected $domain; } /** * Class WebsGroup * * @ORM\Entity * @ORM\Table(name="profils_websgroups", * uniqueConstraints={@ORM\UniqueConstraint(name="websgroup_unique",columns={"name", "domain"})} * ) */ class WebsGroup { /** * @var integer * * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer", nullable=false) */ protected $id; /** * @var string * * @ORM\Column(type="string", length=22, nullable=false) */ protected $name = ''; /** * @var Domain * * @ORM\ManyToOne(targetEntity="Domain", fetch="LAZY") * @ORM\JoinColumn(name="domain", referencedColumnName="name", nullable=false, onDelete="CASCADE") */ protected $domain; /** * @var ArrayCollection * * @ORM\ManyToMany(targetEntity="Web", indexBy="id", fetch="EXTRA_LAZY") * @ORM\JoinTable(name="profils_websgroups_webs", * joinColumns={ * @ORM\JoinColumn(name="websgroup_id", referencedColumnName="id", onDelete="CASCADE"), * @ORM\JoinColumn(name="domain", referencedColumnName="domain", onDelete="CASCADE") * }, * inverseJoinColumns={ * @ORM\JoinColumn(name="web_id", referencedColumnName="id", onDelete="CASCADE"), * @ORM\JoinColumn(name="domain", referencedColumnName="domain", onDelete="CASCADE") * } * ) */ protected $webs; } I've got a domain, some web sites per domain and websgroups which group web sites. I want to be sure in my database that a web group from a domain D can contain only web sites from the very same domain but when calling the console tool for creating my schema it raise :
[Doctrine\ORM\ORMException]
Column name `domain` referenced for relation from Entity\WebsGroup towards Entity\Web does not exist.
It's because domain is already an association to an entity which and is not part of the primary key. I've quick fixed getDefiningClass from Doctrine\ORM\Tools\SchemaTool to make it work but i really don't know if it's the proper way :
private function getDefiningClass($class, $referencedColumnName)
{
$referencedFieldName = $class->getFieldName($referencedColumnName);
if ($class->hasField($referencedFieldName)) {
return array($class, $referencedFieldName);
} else if (in_array($referencedColumnName, $class->getIdentifierColumnNames())) {
// it seems to be an entity as foreign key
foreach ($class->getIdentifierFieldNames() as $fieldName) {
if ($class->hasAssociation($fieldName) && $class->getSingleAssociationJoinColumnName($fieldName) == $referencedColumnName) {
return $this->getDefiningClass(
$this->em->getClassMetadata($class->associationMappings[$fieldName]['targetEntity']),
$class->getSingleAssociationReferencedJoinColumnName($fieldName)
);
}
}
} else if (in_array($referencedColumnName, $class->getAssociationNames())) {
return $this->getDefiningClass(
$this->em->getClassMetadata($class->associationMappings[$referencedColumnName]['targetEntity']),
$class->getSingleAssociationReferencedJoinColumnName($referencedColumnName)
);
}
return null;
}
|
| Comments |
| Comment by Fabio B. Silva [ 29/Apr/13 ] |
|
Bruno CHALOPIN Except for some CS this fix seems good. If you have time you can send as pull request |
| Comment by Bruno CHALOPIN [ 30/Apr/13 ] |
|
I've start making a PR and a test case but it is linked to http://www.doctrine-project.org/jira/browse/DDC-2413 |
| Comment by Benjamin Eberlei [ 01/May/13 ] |
|
You cannot use a reference column that is not a primary key. Doctrine does not support this. |
[DDC-2288] Schema Tool doesn't update collation on table level Created: 08/Feb/13 Updated: 08/Feb/13 |
|
| Status: | Open |
| Project: | Doctrine 2 - ORM |
| Component/s: | Mapping Drivers, Tools |
| Affects Version/s: | None |
| Fix Version/s: | None |
| Type: | Improvement | Priority: | Minor |
| Reporter: | Rickard Andersson | Assignee: | Benjamin Eberlei |
| Resolution: | Unresolved | Votes: | 0 |
| Labels: | collation, schematool | ||
| Description |
|
In Symfony2, when updating the collation option of a table, the schema tool doesn't recognize the change: Changing from: * @ORM\Table() To:
* @ORM\Table(options={"collate"="utf8_swedish_ci"})
Results in: $ php app/console doctrine:schema:update --dump-sql Nothing to update - your database is already in sync with the current entity metadata. |
[DDC-2238] doctrine:schema:update partially broken Created: 11/Jan/13 Updated: 01/May/13 Resolved: 01/May/13 |
|
| Status: | Resolved |
| Project: | Doctrine 2 - ORM |
| Component/s: | Tools |
| Affects Version/s: | 2.3 |
| Fix Version/s: | None |
| Type: | Bug | Priority: | Major |
| Reporter: | Tom Vogt | Assignee: | Benjamin Eberlei |
| Resolution: | Duplicate | Votes: | 0 |
| Labels: | postgresql, schematool | ||
| Environment: |
OS X 10.7.5 also confirmed on: |
||
| Attachments: |
|
||||||||
| Issue Links: |
|
||||||||
| Description |
|
the app/console doctrine:schema:update command generates a seemingly random number of statements like these: ALTER TABLE geodata ALTER humidity SET ; which are obvious invalid SQL commands. The mappings are fine, validate and the application works just fine. Here's an example from the mapping files including two of the above statements: <field name="coast" type="boolean"/> I am using doctrine2-spatial as an extension for GIS information. This problem shows up both in entities using spatial data and entities not using spatial data. I'll gladly help debug this, as right now I can't update my dev database with --force, I need to use --dump-sql and filter out the invalid lines. |
| Comments |
| Comment by Benjamin Eberlei [ 12/Jan/13 ] |
|
Can you dump the SchemaDiff/ColumnDiff instances that are returned from lib/Doctrine/DBAL/Schema/Comparator.php? |
| Comment by Tom Vogt [ 12/Jan/13 ] |
|
requested dump of SchemaDiff |
| Comment by Tom Vogt [ 12/Jan/13 ] |
|
added in the file schemadiff.txt - I added this in Schematool.php - getUpdateSchemaSql(): $comparator = new Comparator(); if you need other output, just tell me what entity to dump and where. I'll be happy to help. The file also contains the buggy update statements it creates towards the end. There's a few non-crucial bugs included, where it alters the geospatial columns to themselves (i.e. river.course already is a geometry/linestring). I don't worry about those because they don't break anything. |
| Comment by Tom Vogt [ 15/Apr/13 ] |
|
Is there any update on this? I'm still having this issue, with many different entities, always the same problem, for example: ALTER TABLE event ALTER priority SET ; Which is an integer field on an entity that doesn't have any GIS elements, so I'm not even sure if it's caused by that anymore. |
| Comment by Benjamin Eberlei [ 01/May/13 ] |
|
Tom Vogt I added a fix for PostgreSQL today, can you verify again if this works? Its included in the 2.3 branch. |
| Comment by Benjamin Eberlei [ 01/May/13 ] |
|
Duplicate of http://www.doctrine-project.org/jira/browse/DBAL-504 |
[DDC-2135] Setting column defaults using options in the annotations causes redundant alter statements Created: 09/Nov/12 Updated: 01/May/13 Resolved: 01/May/13 |
|
| Status: | Resolved |
| Project: | Doctrine 2 - ORM |
| Component/s: | ORM |
| Affects Version/s: | 2.2.2 |
| Fix Version/s: | 2.3.4 |
| Security Level: | All |
| Type: | Bug | Priority: | Major |
| Reporter: | Cory Comer | Assignee: | Benjamin Eberlei |
| Resolution: | Duplicate | Votes: | 0 |
| Labels: | Cli, schematool | ||
| Description |
|
When using the Column annotation on an entity and passing the options parameter to set a default value for a column, the doctrine cli will generate the alter statement every time the schema-tool is run. This doesn't break the functionality of updating the schema using the cli but when you have multiple entities using default values in this manner it becomes cumbersome to investigate issues during updates that fail and you need to dump the generated sql to examine. Use case: We have a number of entities that include 'boolean' flags. The data for these entities is inserted into the database through an integration process handled by another application. For all of the flags we want to set a default value of 0 to avoid having to modify the integration scripts when a new flag is added to an entity and the data is not available yet. Example entity: /** * @ORM\Entity * @ORM\Table(name="example") */ class Example { /** * @ORM\Id * @ORM\Column(type="integer") */ protected $id; /** @ORM\Column(type="integer", options={"default" = 0}) */ protected $disabled; } $ php bin/doctrine orm:schema-tool:update --dump-sql ALTER TABLE example CHANGE disabled disabled TINYINT(1) DEFAULT '0' NOT NULL; This alter statement is generated on every run of the schema-tool even though the schema has already been altered. |
| Comments |
| Comment by Benjamin Eberlei [ 01/May/13 ] |
|
This is fixed for 2.3.4 |
[DDC-2119] Problem with inheritance type: INHERITANCE_TYPE_NONE and INHERITANCE_TYPE_TABLE_PER_CLASS Created: 03/Nov/12 Updated: 08/Apr/13 |
|
| Status: | Open |
| Project: | Doctrine 2 - ORM |
| Component/s: | DQL, Tools |
| Affects Version/s: | 2.1 |
| Fix Version/s: | None |
| Type: | Bug | Priority: | Major |
| Reporter: | SergSW | Assignee: | Benjamin Eberlei |
| Resolution: | Unresolved | Votes: | 0 |
| Labels: | dql, schematool | ||
| Attachments: |
|
| Description |
|
I tried to create inheritance entities with save policy table per class. I had found a solution. In Doctrine\ORM\Tools\SchemaTool private function _gatherRelationsSql($class, $table, $schema) { foreach ($class->associationMappings as $fieldName => $mapping) { // if (isset($mapping['inherited'])) { // - old version /** * SSW * It's the solution */ if (isset($mapping['inherited']) && !$class->isInheritanceTypeNone() && !$class->isInheritanceTypeTablePerClass() ) { continue; } $foreignClass = $this->_em->getClassMetadata($mapping['targetEntity']); ... But it was enough. In DQL query a simple query was made wrong. I had found a solution again. public function walkSelectExpression($selectExpression) ... // original => if (isset($mapping['inherited'])){ // It's the solution if (isset($mapping['inherited']) && !$class->isInheritanceTypeNone() && !$class->isInheritanceTypeTablePerClass()) { $tableName = $this->_em->getClassMetadata($mapping['inherited'])->table['name']; } else { $tableName = $class->table['name']; } ... This problems are topical for inheritance type: INHERITANCE_TYPE_NONE and INHERITANCE_TYPE_TABLE_PER_CLASS. I don't know, may be my solutions are wrong. But some programmers want to correctly work with INHERITANCE_TYPE_TABLE_PER_CLASS. Sorry for my english. |
| Comments |
| Comment by Fabio B. Silva [ 05/Nov/12 ] |
|
Hi SergSW Could you try to write a failing test case ? Thanks |
| Comment by SergSW [ 06/Nov/12 ] |
|
SSW/TestBundle with the problem |
| Comment by SergSW [ 07/Nov/12 ] |
|
I install the Symfony v2.0.18. and made small TestBundle. |
| Comment by SergSW [ 07/Nov/12 ] |
|
MySQL dump |
| Comment by Benjamin Eberlei [ 12/Nov/12 ] |
|
Adjusted example formatting, don't apologize for your English, thanks for the report! |
| Comment by Benjamin Eberlei [ 24/Dec/12 ] |
|
What version of 2.1 are you using? We don't actually support 2.1 anymore. Inheritance has always worked as used in hundrets of unit-tests, this changes look quite major a bug to have been missed before. I can't really explain whats happening here. |
| Comment by Marco Pivetta [ 23/Jan/13 ] |
|
SergSW news? |
[DDC-2011] Schema tool fail to handle ManyToMany relation with an existing joinTable Created: 04/Sep/12 Updated: 09/Feb/13 Resolved: 09/Feb/13 |
|
| Status: | Resolved |
| Project: | Doctrine 2 - ORM |
| Component/s: | Tools |
| Affects Version/s: | Git Master |
| Fix Version/s: | None |
| Security Level: | All |
| Type: | Bug | Priority: | Minor |
| Reporter: | Erwan Richard | Assignee: | Benjamin Eberlei |
| Resolution: | Won't Fix | Votes: | 2 |
| Labels: | schematool | ||
| Description |
|
The schemaTool fail with a Doctrine\DBAL\Schema\SchemaException when trying to handle ManyToMany relation with an existing joinTable. My use case : I'm using the Tree DoctrineExtension with the Closure strategy. It create a mapping between my Category entity and a CategoryClosure entity. For conveniency, I've setup a ManyToMany relation between Category and Category with the CategoryClosure table as joinTable. Doctrine ORM handle perfectly this case but the schema tool is failing with : |
| Comments |
| Comment by Alexander [ 09/Feb/13 ] |
|
You can't expect the schematool to play nice if you use the table of an entity as m2m table. |