使用OneToMany / ManyToOne教义关系检索嵌套对象

时间:2017-12-15 20:17:35

标签: php symfony doctrine-orm

我想在两个DAO之间做一对多/多对一的关系。

在注释属性后,我在结果中有一个意外且无限制的对象。

str.unpack('M')[0].force_encoding('UTF-8')

并且

/**
 * TicketSponsorDAO
 *
 * @ORM\Table(name="ticket_sponsor")
 * @ORM\Entity
 */
class TicketSponsorDAO {
  /**
   * @var int
   *
   * @ORM\Column(name="ticket_id", type="integer")
   */
  private $ticketId;

  /**
   * @ORM\ManyToOne(targetEntity="TicketDAO", inversedBy="sponsors")
   * @ORM\JoinColumn(name="ticket_id", referencedColumnName="id")
   */
  private $ticket;

  ...
}

执行时:

/**
 * TicketDAO
 *
 * @ORM\Table(name="ticket")
 * @ORM\Entity
 */
class TicketDAO
{ 
  /**
   * @var int
   *
   * @ORM\Column(name="id", type="integer")
   * @ORM\Id
   * @ORM\GeneratedValue(strategy="AUTO")
   */
  private $id;

  /**
   * @ORM\OneToMany(targetEntity="TicketSponsorDAO", mappedBy="ticket")
   */
  private $sponsors;

  public function __construct() {
      $this->sponsors = new ArrayCollection();
  }
  ...
 }

我有关于票证DAO的良好属性,但关系不起作用,我有一个无限制的对象被返回。

所以在MySQL数据库中,我有外键,FK索引和主键。

var_dump: enter image description here

我遵循此文档:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-many-bidirectional

4 个答案:

答案 0 :(得分:2)

使用symfony dumper,因为您有循环引用。

dump($spo);

答案 1 :(得分:0)

你好var_dump()将返回你的对象和类的类型。

你应该尝试获取这样的属性

override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.barHideOnTapGestureRecognizer.addTarget(self, action: #selector(barHideAction(_:)))
    let searchController = UISearchController(searchResultsController: nil)
    navigationItem.searchController = searchController
    navigationItem.hidesSearchBarWhenScrolling = false
    navigationController?.hidesBarsOnTap = true
}

@objc func barHideAction(_ guesture: UITapGestureRecognizer) {
    updateFrame()
}

func updateFrame() {
    if let nc = navigationController {
        let isHidden = nc.isNavigationBarHidden
        searchController.searchBar.superview?.isHidden = isHidden

        if isHidden {
            self.additionalSafeAreaInsets.top = -64 // fixed by a magic num
        }
        else {
            self.additionalSafeAreaInsets.top = 0
        }
    }
}

它会返回一个数组或者可能是一个集合;

答案 2 :(得分:0)

对我来说,看起来一张票有很多赞助商,在这种情况下我只看到一个问题。 id表格中没有auto_increment TicketSponsorDao,但有ticket_id列,我不明白其目的。

/**
 * TicketSponsorDAO
 *
 * @ORM\Table(name="ticket_sponsor")
 * @ORM\Entity
 */
class TicketSponsorDAO {
  /**
   * @var int
   *
   * @ORM\Column(name="id", type="integer")
   * @ORM\Id
   * @ORM\GeneratedValue(strategy="AUTO")
   */
  private $id;

  ...
}

答案 3 :(得分:0)

在它与OneToMany / ManyToOne关系的逻辑之间有一个递归,因为One的对象在Many的对象中被引用,...

var_dump没有正确管理它。

要显示我从Symfony使用dump的对象,这很好!

如果转储显示在浏览器中,我们可以在DAO类中添加__toString return serialize($this)

否则,我们有一个错误:

  

... ENTITY无法转换为字符串...