我正在关注此文档:http://www.propelorm.org/documentation/04-relationships.html#manytomany_relationships
我有一个非常相似的设置(尽管为了可读性而略微简化):
日志
<table name="logbook" phpName="Logbook" idMethod="native">
<column name="id" phpName="Id" type="INTEGER" size="10" sqlType="int(10) unsigned" primaryKey="true" autoIncrement="true" required="true"/>
<column name="location" phpName="Location" type="VARCHAR" size="255" required="false"/>
</table>
与
<table name="contact" phpName="Contact" idMethod="native">
<column name="id" phpName="Id" type="INTEGER" size="10" sqlType="int(10) unsigned" primaryKey="true" autoIncrement="true" required="true"/>
<column name="title" phpName="Title" type="VARCHAR" size="255" required="true"/>
<column name="name" phpName="Name" type="VARCHAR" size="255" required="true"/>
<column name="telephone" phpName="Telephone" type="VARCHAR" size="20" required="true"/>
</table>
日志联系
<table name="logbook_contact" phpName="LogbookContact" idMethod="native" isCrossRef="true">
<column name="logbook_id" phpName="LogbookId" type="INTEGER" size="10" sqlType="int(10) unsigned" primaryKey="true" required="true"/>
<column name="contact_id" phpName="ContactId" type="INTEGER" size="10" sqlType="int(10) unsigned" primaryKey="true" required="true"/>
<foreign-key foreignTable="contact" name="fk_logbook_contact_contact" onDelete="CASCADE" onUpdate="CASCADE">
<reference local="contact_id" foreign="id"/>
</foreign-key>
<foreign-key foreignTable="logbook" name="fk_logbook_contact_logbook" onDelete="CASCADE" onUpdate="CASCADE">
<reference local="logbook_id" foreign="id"/>
</foreign-key>
<index name="fk_logbook_contact_contact">
<index-column name="contact_id"/>
</index>
</table>
注意logbook_contact表上的isCrossRef="true"
,它表明这是一个联结表。从这里我重新运行propel-gen om
甚至propel-gen convert-conf
(清除构建目录后)但我似乎仍然无法做到这样的事情:
<?php
/* presume $logbook has been LogbookQuery::create()'d already... */
$contacts = $logbook->getContacts();
$nbContacts = $logbook->countContacts();
我使用的是Zend Studio,我在代码提示窗口中看不到它:
有人能告诉我这里可能做错了吗?我很高兴你能指出我的文档 - 我尽可能地密切关注这些内容,直到$test
工作正常。
答案 0 :(得分:2)
您可能想要getContacts()
个实例上的Logbook
,而不是PropelCollection
。查看您的代码,您似乎获取了Logbook
的集合而不是实例:
$this->logbook = $this->company->getLogbooks();
此处,$this->logbook
似乎是关于自动完成输出的PropelCollection
。它不是Logbook
对象。你可以尝试:
$test = $this->logbook[0]->getContacts();