1

私のデータベースには、userテーブルがあります。このユーザー テーブルにはいくつかのフィールドがあり、その中にparent_user_iduser_class_idがあります。どちらも外部キーであり、どちらも主キーの一部ではありません。私の BaseUser.php には、次のように外部キーがリストされています。

protected $aUserRelatedByUserParentId;
protected $aUserClass;

同様に、私はgetUserClass()andを持っていますが、 andsetUserClass()は持っていません。むしろ、私は持っています。これには理由がありますか? もしそうなら、schema.xml でオーバーライドできますか? ここにあります:getUserParent()setUserParent()getUserParentId() and setUserParentId()

<?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 に答える