1

在我的数据库中,我有一个user表。这个用户表有几个字段,其中parent_user_iduser_class_id,都是外键,它们都不是主键的一部分。在我的 BaseUser.php 中,它列出了如下的外键:

protected $aUserRelatedByUserParentId;
protected $aUserClass;

同样,我有getUserClass()andsetUserClass()但我没有getUserParent()and 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>
4

1 回答 1

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().

顺便说一句,我希望您使用nameFK 定义上的属性来为您的约束提供自定义名称。如果你想控制它,那很好,但我倾向于让 Propel 随意命名它们。如果您对此感到满意,则可以将它们从架构中删除。

于 2013-10-23T14:22:02.470 回答