[英]Can't get foreign key to work in Propel2
我正在尝试将Propel2用于我的Web应用程序。 我只是不知道为什么我的外键连接不起作用。 它与Book示例非常相似,并且效果很好。
我的schema.xml:
<database name="default" defaultIdMethod="native"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://xsd.propelorm.org/1.6/database.xsd">
<!-- Table Structure: 'Games' -->
<table name="games" phpName="Game">
<column name="game_id" type="INTEGER" required="true" sqlType="int(11) unsigned" primaryKey="true" autoIncrement="true"/>
<column name="game_name" type="VARCHAR" size="150" required="true"/>
<unique name="UNIQUE_game_name">
<unique-column name="game_name" size="150" />
</unique>
</table>
<!-- Table Structure: 'Teams' -->
<table name="teams" phpName="Team">
<column name="team_game" type="INTEGER" required="true" sqlType="int(11) unsigned"/>
<column name="team_id" type="INTEGER" required="true" sqlType="int(11) unsigned" primaryKey="true" autoIncrement="true"/>
<column name="team_name" type="VARCHAR" size="150" required="true"/>
<index name="KEY_teams_for_constraints">
<index-column name="team_game" size="11" />
<index-column name="team_id" size="11" />
</index>
<index name="KEY_teams_name_check">
<index-column name="team_game" size="11" />
<index-column name="team_name" size="150" />
</index>
<foreign-key name="FK_team_game" foreignTable="games" phpName="Game" refPhpName="Team">
<reference local="team_game" foreign="game_id"/>
</foreign-key>
</table>
</database>
我的PHP测试代码:
echo "----- ----- ----- PROPEL TEST (START) ----- ----- ----- <BR><BR>";
echo "--1--<BR>";
$game = new Game();
$game->setGameName('PropelTestGame10');
echo "--2--<BR>";
$team = new Team();
$team->setTeamName('Propel Test Team10');
$team->setTeamGame($game);
echo "--3--<BR>";
$team->save();
echo "--4--<BR>";
var_dump($team->toArray());
echo "<BR>";
echo "--5--<BR>";
echo "----- ----- ----- PROPEL TEST (END) ----- ----- ----- <BR><BR><BR><BR><BR>";
PHP代码生成以下输出:
----- ----- ----- PROPEL TEST (START) ----- ----- -----
--1--
--2--
Notice: Object of class Game could not be converted to int in E:\MyApp\Model\Base\Team.php on line 351
--3--
--4--
array(3) { ["TeamGame"]=> int(1) ["TeamId"]=> int(10) ["TeamName"]=> string(18) "Propel Test Team10" }
--5--
----- ----- ----- PROPEL TEST (END) ----- ----- -----
如果游戏表为空,则数据库中不存储任何内容。 在这种情况下,游戏表中有一个旧行,并且插入的团队与该游戏相关联(TeamGame = 1)。 没有新内容保存到游戏桌。
我究竟做错了什么? 我看不到为什么我的结构在书本示例中不起作用( Propel 2-书本示例 )。
这是您的错误:
$team->setTeamGame($game);
您正在尝试将team_game
列设置为对象值。 您在架构中写道,这将是整数,因此基类中的此自动生成的函数需要整数值。 您应该使用:
$team->setGame($game);
如果要设置相关对象,或者可以使用:
$game->save();
$team-setTeamGame($game->getPrimaryKey());
这是您的工作示例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.