我正在遵循此文档: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>

注意日志联系表上的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工作正常为止。

最佳答案

您可能想在getContacts()实例上调用Logbook,而不是在PropelCollection实例上。看你的代码,似乎你获取了一个Logbook的集合而不是一个实例:

$this->logbook = $this->company->getLogbooks();

这里,$this->logbook似乎是关于自动完成输出的PropelCollection。它不是Logbook对象。您可以尝试:
$test = $this->logbook[0]->getContacts();

关于php - 这些插入多对多关系为什么不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12058780/

10-11 22:44