在我的数据库中,我有一个user
表。此用户表有几个字段,其中包括parent_user_id
和user_class_id
两个外键,它们都不是主键的一部分。在我的BaseUser.php中,它列出了外键,如下所示:
protected $aUserRelatedByUserParentId;
protected $aUserClass;
同样,我有getUserClass()
和setUserClass()
,但我没有getUserParent()
和setUserParent()
。相反,我有getUserParentId() and setUserParentId()
。这是否有原因,如果是这样,我可以在schema.xml中覆盖它吗?这是:
<?xml version="1.0" encoding="utf-8"?>
<!--Autogenerated by PropelSchemaReverseTask class.-->
<database name="test" defaultIdMethod="native">
<table name="user" phpName="User" idMethod="native">
<column name="id" phpName="Id" type="INTEGER" primaryKey="true" required="true"/>
<column name="parent_user_id" phpName="ParentUserId" type="INTEGER" required="true"/>
<column name="name" phpName="Name" type="VARCHAR" size="45" required="true"/>
<column name="description" phpName="Description" type="VARCHAR" size="45" required="true"/>
<column name="user_class_id" phpName="UserClassId" type="INTEGER" required="true"/>
<foreign-key foreignTable="user_class" name="fk_user_class">
<reference local="user_class_id" foreign="id"/>
</foreign-key>
<foreign-key foreignTable="user" name="fk_user_parent">
<reference local="parent_user_id" foreign="id"/>
</foreign-key>
<index name="fk_user_parent_idx">
<index-column name="parent_user_id"/>
</index>
<index name="fk_user_class_idx">
<index-column name="user_class_id"/>
</index>
<vendor type="mysql">
<parameter name="Engine" value="InnoDB"/>
</vendor>
</table>
<table name="user_class" phpName="UserClass" idMethod="native">
<column name="id" phpName="Id" type="INTEGER" primaryKey="true" required="true"/>
<column name="name" phpName="Name" type="VARCHAR" size="45" required="true"/>
<column name="permissions" phpName="Permissions" type="VARCHAR" size="45" required="true"/>
<vendor type="mysql">
<parameter name="Engine" value="InnoDB"/>
</vendor>
</table>
</database>
答案 0 :(得分:1)
我刚刚在自己的Propel环境中生成了你的架构,发现你现在应该有这个:
/* @var $user User */
$user = new User();
$user->getUserRelatedByParentUserId();
$user->getUserClass();
我注意到您在各个列上都有phpName
个属性 - 我建议删除它们,因为您正在请求无论如何都要生成的默认值。
然而,你走在正确的轨道上 - 试试这个:
<foreign-key foreignTable="user" name="fk_user_parent" phpName="ParentUser">
<reference local="parent_user_id" foreign="id"/>
</foreign-key>
我假设您对UserClass的默认关系名称感到满意,因此不会更改。但是,对于自我加入,我添加了一个自定义关系名称,该名称应该为您提供$user->getParentUser()
。
顺便说一下,我希望您使用FK定义上的name
属性为约束提供自定义名称。如果你想控制它,这很好,但我倾向于让Propel按照自己的意愿命名。如果您对此感到满意,可以将其从架构中删除。