php - Doctrine setter 在多对多关系上有什么用?

标签 php symfony1 doctrine persistence many-to-many

今天我遇到了一些关于 Doctrine (1.2) 的意外行为。

情况

我有一个Document 类和一个Anomaly 类。一个 Document 可以有很多 Anomalies,一个 Anomaly 可以在很多 Documents 上找到。

#schema.yml

Document:
  columns:
    id:       { type: integer(12), primary: true, autoincrement: true }
    scan_id:  { type: integer(10), notnull: true }
    name:     { type: string(100), notnull: true }

Anomaly:
  columns:
    id:     { type: integer(5), primary: true, autoincrement: true }
    label:  { type: string(200) }
    value:  { type: integer(6), notnull: true, unique: true }
  relations:
    Documents:
      class:        Document
      refClass:     DocumentAnomaly
      local:        anomaly_id
      foreign:      document_id
      foreignAlias: Anomalies

DocumentAnomaly:
  columns:
    document_id:  { type: integer(12), primary: true }
    anomaly_id:   { type: integer(5), primary: true }
  relations:
    Anomaly:  { local: anomaly_id, foreign: id }
    Document: { local: document_id, foreign: id }

问题

我想实例化一个新的 Document,为其属性分配一些值,并为其分配一个 Anomaly 列表。

#sample code

$anomalies = Doctrine_Core::getTable('Anomaly')->getSomeAnomalies(); //returns a valid and non empty Doctrine_Collection of Anomalies

$document = new Document();
$document->setName('test')
  ->setScanId(3574)
  ->setAnomalies($anomalies)
  ->save();

echo $document->getId(); // "1"
print_r($document->getDocumentAnomaly()->toArray(); // empty array
print_r($document->getAnomalies()->toArray(); //correct array, listing anomalies from "->getSomeAnomalies()"

后果:Document 保留在数据库中,但不是指向其Anomalies 的链接(DocumentAnomaly表/对象)。

解决方法

$anomalies = Doctrine_Core::getTable('Anomaly')->getSomeAnomalies();

$document = new Document();
$document->setName('test')
  ->setScanId(3574)
  ->setAnomalies($anomalies)
  ->save();

foreach ($anomalies as $anomaly)
{
  $documentAnomaly = new DocumentAnomaly();
  $documentAnomaly->setDocument($document)
    ->setAnomaly($anomaly);
  $documentAnomaly->save();
}

//Document is persisted, *and it's DocumentAnomalies too*.

我的问题

$document->setAnomalies() 方法有什么用?有没有 ?我错过了什么吗?

谢谢。

最佳答案

$Document->Anomalies->add($Anomaly);

关于php - Doctrine setter 在多对多关系上有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5678647/

相关文章:

php - Mysql查询IFEXIST不返回任何结果

css - symfony 不渲染 CSS

php - 如何修复 302 重定向并使其成为 301?

php - 带有递归的 ArrayCollection::forAll

sql - 从 Doctrine 迁移中获取 SQL

java - Spring mvc 应用程序与 php 论坛和 wiki 集成

PHP SimpleXML 按元素类型分组

php - 'eval() uating' 条件的替代方案

php - 如何在symfony中加密数据库

php - Symfony 2 Doctrine 2 使用 inversedBy 和 mappedBy 进入多对多关系?