Skip to content

Commit 2da1345

Browse files
authored
Merge pull request #1994 from vol4onok/patch-crossref
Allow to use non-primary columns in crossref tables
2 parents f4889ff + 2f29c23 commit 2da1345

File tree

3 files changed

+100
-2
lines changed

3 files changed

+100
-2
lines changed

src/Propel/Generator/Model/CrossForeignKeys.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public function getIncomingForeignKey(): ?ForeignKey
132132
*/
133133
public function isAtLeastOneLocalPrimaryKeyNotCovered(ForeignKey $fk): bool
134134
{
135-
$primaryKeys = $fk->getLocalPrimaryKeys();
135+
$primaryKeys = $fk->getLocalColumnObjects();
136136
foreach ($primaryKeys as $primaryKey) {
137137
$covered = false;
138138
foreach ($this->getCrossForeignKeys() as $crossFK) {

src/Propel/Generator/Model/ForeignKey.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -874,7 +874,7 @@ public function isAtLeastOneLocalColumnRequired(): bool
874874
*/
875875
public function isAtLeastOneLocalPrimaryKeyIsRequired(): bool
876876
{
877-
foreach ($this->getLocalPrimaryKeys() as $pk) {
877+
foreach ($this->getLocalColumnObjects() as $pk) {
878878
if ($pk->isNotNull() && !$pk->hasDefaultValue()) {
879879
return true;
880880
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
<?php
2+
3+
/**
4+
* MIT License. This file is part of the Propel package.
5+
* For the full copyright and license information, please view the LICENSE
6+
* file that was distributed with this source code.
7+
*/
8+
9+
namespace Propel\Tests\Issues;
10+
11+
use TestGroupObject;
12+
use TestUserObject;
13+
use TestGroupObjectNegative;
14+
use TestUserObjectNegative;
15+
use Propel\Generator\Util\QuickBuilder;
16+
use Propel\Tests\TestCase;
17+
18+
/**
19+
* Regression test for https://github.com/propelorm/Propel2/pull/1994
20+
*/
21+
class IssueIsCrossRefTest extends TestCase
22+
{
23+
/**
24+
* @return void
25+
*/
26+
public function setUp(): void
27+
{
28+
if (!class_exists('\TestUserGroupObject')) {
29+
$schema = <<<EOF
30+
<database>
31+
<table name="test_group_object">
32+
<column name="id" type="integer" primaryKey="true" required="true" />
33+
</table>
34+
<table name="test_user_object">
35+
<column name="id" type="integer" primaryKey="true" required="true" />
36+
</table>
37+
<table name="test_group_object_negative">
38+
<column name="id" type="integer" primaryKey="true" required="true" />
39+
</table>
40+
<table name="test_user_object_negative">
41+
<column name="id" type="integer" primaryKey="true" required="true" />
42+
</table>
43+
<table name="test_user_group_object" isCrossRef="true">
44+
<column name="id" type="integer" primaryKey="true" required="true" />
45+
<column name="user_id" type="integer" required="true"/>
46+
<column name="group_id" type="integer" required="true"/>
47+
<foreign-key foreignTable="test_user_object">
48+
<reference local="user_id" foreign="id"/>
49+
</foreign-key>
50+
<foreign-key foreignTable="test_group_object">
51+
<reference local="group_id" foreign="id"/>
52+
</foreign-key>
53+
</table>
54+
<table name="test_user_group_object_negative" isCrossRef="true">
55+
<column name="id" type="integer" primaryKey="true" required="true" />
56+
<column name="user_negative_id" type="integer"/>
57+
<column name="group_negative_id" type="integer"/>
58+
<foreign-key foreignTable="test_user_object_negative">
59+
<reference local="user_negative_id" foreign="id"/>
60+
</foreign-key>
61+
<foreign-key foreignTable="test_group_object_negative">
62+
<reference local="group_negative_id" foreign="id"/>
63+
</foreign-key>
64+
</table>
65+
</database>
66+
EOF;
67+
QuickBuilder::buildSchema($schema);
68+
}
69+
}
70+
71+
/**
72+
* @return void
73+
*/
74+
public function testGenerateIsCrossRefCode()
75+
{
76+
$testGroupObject = new TestGroupObject();
77+
$testUserObject = new TestUserObject();
78+
$testGroupNegative = new TestGroupObjectNegative();
79+
$testUserNegative = new TestUserObjectNegative();
80+
81+
$this->assertTrue(
82+
method_exists($testGroupObject, 'createTestUserObjectsQuery'),
83+
'Class does not have method createTestUserObjectsQuery'
84+
);
85+
$this->assertTrue(
86+
method_exists($testUserObject, 'createTestGroupObjectsQuery'),
87+
'Class does not have method createTestUserObjectsQuery'
88+
);
89+
$this->assertFalse(
90+
method_exists($testGroupNegative, 'createTestUserObjectNegativesQuery'),
91+
'Class does not have method createTestUserObjectsQuery'
92+
);
93+
$this->assertFalse(
94+
method_exists($testUserNegative, 'createTestGroupObjectNegativesQuery'),
95+
'Class does not have method createTestUserObjectsQuery'
96+
);
97+
}
98+
}

0 commit comments

Comments
 (0)