Reputation: 683
I have two tables which have two different relations. A table User, and a Table Job for this example.
I wan't a One-To-Many relationship between them (a User can create Several Job), AND a Many-To-Many relationShip alongside (A User can be assigned several jobs, a Job can be assigned to several Users). I have a lot of troubles finding how to use phpName and refPhpName to avoid Propel trying to declare several time same methods / attributs ($collJobs in User table for example).
Here is a simplest sample of my Schema
<table name="autoclass">
<column name="userId" phpName="Id" type="INTEGER" primaryKey="true" autoIncrement="true" required="true"/>
<column name="jobId" phpName="JobId" type="INTEGER" primaryKey="true" autoIncrement="true" required="true"/>
<foreign-key foreignTable="job" onDelete="cascade" onUpdate="cascade">
<reference local="jobId" foreign="jobId"/>
</foreign-key>
</table>
<table name="job">
<column name="jobId" phpName="JobId" type="INTEGER" primaryKey="true" autoIncrement="true" required="true"/>
// Some other meaningless fields
</table>
<table name="user_job" crossRef="true">
<column name="jobId" phpName="JobId" type="INTEGER" primaryKey="true" autoIncrement="true" required="true"/>
<column name="userId" phpName="Id" type="INTEGER" primaryKey="true" autoIncrement="true" required="true"/>
<foreign-key foreignTable="job" onDelete="cascade" onUpdate="cascade">
<reference local="jobId" foreign="jobId"/>
</foreign-key>
<foreign-key foreignTable="user" onDelete="cascade" onUpdate="cascade">
<reference local="userId" foreign="userId"/>
</foreign-key>
</table>
Can you please help me find how to finallyse this schema ?
I would like to do something like $user->getJobs(); $user->getAssignedJobs(); $job->getUser(); $job->getAssignedUsers();
Upvotes: 0
Views: 48
Reputation: 683
<table name="autoclass">
<column name="userId" phpName="Id" type="INTEGER" primaryKey="true" autoIncrement="true" required="true"/>
<column name="jobId" phpName="JobId" type="INTEGER" primaryKey="true" autoIncrement="true" required="true"/>
<foreign-key foreignTable="job" onDelete="cascade" onUpdate="cascade">
<reference local="jobId" foreign="jobId"/>
</foreign-key>
</table>
<table name="job">
<column name="jobId" phpName="JobId" type="INTEGER" primaryKey="true" autoIncrement="true" required="true"/>
// Some other meaningless fields
</table>
<table name="user_job" crossRef="true">
<column name="jobId" phpName="JobId" type="INTEGER" primaryKey="true" autoIncrement="true" required="true"/>
<column name="userId" phpName="UserId" type="INTEGER" primaryKey="true" autoIncrement="true" required="true"/>
<foreign-key foreignTable="job" onDelete="cascade" onUpdate="cascade" phpName="AssignedJob">
<reference local="jobId" foreign="jobId"/>
</foreign-key>
<foreign-key foreignTable="user" onDelete="cascade" onUpdate="cascade"phpName="AssignedUser" >
<reference local="userId" foreign="userId"/>
</foreign-key>
</table>
Put phpName on foreign-keys :)
Upvotes: 0