【问题标题】:Doctrine: Object of class could not be converted to string教义:类的对象无法转换为字符串
【发布时间】:2018-11-27 16:39:38
【问题描述】:

我的教义版本:v2.6.1

我正在尝试进行关联 ManyToOne,我的意思是,Many 工作只有 One 状态。 在表作业中,我有一个名为“status_id”的列,它通过外键连接到表状态。在类 php 文件 Jobs.php 我有:

namespace App\Models\Entity;

use Doctrine\ORM\Mapping as ORM;
use App\Models\Entity\Edition;
use App\Models\Entity\Status;

/**
 * Class Jobs
 * @package App\Models\Entity
 * @ORM\Entity
 * @ORM\Table(name="jobs")
 */
class Jobs{
  /**
   * @var int
   * @ORM\Id
   * @ORM\Column(type="integer")
   * @ORM\GeneratedValue
   **/
  private $id;

  (......)

  /**
   * @var int
   * Many Jobs has One Status.
   * @ORM\Column(name="status_id")
   * @ORM\ManyToOne(targetEntity="Status", inversedBy="jobs")
   * @ORM\JoinColumn(name="status_id", referencedColumnName="id")
   **/
  private $status;

  (......)

  /**
   * @return Jobs
   */
  public function getStatus() {
    return $this->status;
  }

  /**
   * @param Jobs $status
   */
  public function setStatus(Status $status = null){
    $this->status = $status;
  }
}

显然这里我没有类的所有定义,只插入了我认为相关的内容。 在最后一个 setStatus() 中,我正在与另一个文件中名为 Status 的另一个类建立连接。

在 index.php 我有:

  $job = new App\Models\Entity\Jobs();
  $job->setName($insertName);
  $job->setNotes("");
  $job->setSize("30x20x11");
  $job->setCustomerRef("");
  $job->setEditionId(17);

  $status = new App\Models\Entity\Status();
  $status->setName("Aprovado");
  $job->setStatus($status);

  $entityManager->persist($status);
  $entityManager->persist($job);
  $entityManager->flush();  

这给了我一个错误,我知道它在命令 flush() 中,我做了一些 die() 来检查它是否给出了错误。 错误如下:

可恢复的致命错误:App\Models\Entity\Status 类的对象 无法转换为字符串 /home/.../vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php 在第 101 行

【问题讨论】:

    标签: php class pdo doctrine-orm


    【解决方案1】:

    问题在于您如何映射$status 属性:它同时使用@ORM\Column 和关联映射,这是一个冲突,导致Doctrine 将您的状态保存为string。去掉@ORM\Column注解就可以了。

    【讨论】:

    • 一开始我有这样的代码,但这给了我一些错误,解决方案是添加 *ORM*。另外,我又做了同样的事情,错误是:App\Models\Entity\Status 类中的注释“@Entity”从未被导入。您是否可能忘记为此注释添加“使用”语句?
    • 修复错误是添加回@ORM\。检查此链接:stackoverflow.com/questions/11910147/…
    • 我不是在谈论 `@ORM` 前缀,我是在向您指出映射中的错误,该错误会导致问题中描述的错误。
    • 我找不到如何解决这个问题,因为我正在使用文档中的代码。有什么帮助吗?
    • 是的,不要将@ORM\Column@ORM\ManyToOne 组合在一个属性上,按照文档中的映射:doctrine-project.org/projects/doctrine-orm/en/2.6/reference/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2015-07-27
    • 2012-04-29
    • 2011-04-06
    • 2011-11-30
    • 2011-08-30
    相关资源
    最近更新 更多