Symfony3 - 实体不与关系一起工作(具有索引和约束的数据库)

问题描述:

现在主演几个小时,也许我错过了一些明显的东西。Symfony3 - 实体不与关系一起工作(具有索引和约束的数据库)

具有此数据库结构(使用索引和约束)

CREATE TABLE `exploit` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `edb_id` varchar(100) COLLATE utf8_unicode_ci NOT NULL, 
    `date` datetime not null, 
    `author` bigint(20) not null , 
    `name` varchar(255) not null, 
    `category` bigint(20) not null, 
    `version` varchar(255) not null, 
    `type` bigint(20) not null, 
    `content` longtext COLLATE utf8_unicode_ci NOT NULL, 
    `dork` varchar(255) null, 
    `software_link` varchar(255) null, 
    `tested_on` varchar(255) null, 
    PRIMARY KEY (`id`), 
    KEY `exploit_category_idx` (`category`), 
    KEY `exploit_type_idx` (`type`), 
    KEY `exploit_author_idx` (`author`) 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

CREATE TABLE `category` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `category_name_id_idx` (`id`), 
    CONSTRAINT `category_name_id` FOREIGN KEY (`id`) REFERENCES `exploit` (`category`) ON DELETE CASCADE 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

CREATE TABLE `type` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `type_name_id_idx` (`id`), 
    CONSTRAINT `type_name_id` FOREIGN KEY (`id`) REFERENCES `exploit` (`type`) ON DELETE CASCADE 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

CREATE TABLE `author` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `author_name_id_idx` (`id`), 
    CONSTRAINT `author_name_id` FOREIGN KEY (`id`) REFERENCES `exploit` (`author`) ON DELETE CASCADE 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

创建这些实体:

:::::::::::::: 
Author.php 
:::::::::::::: 
<?php 
namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use AppBundle\Entity\Exploit; 

/** 
* Author 
* 
* @ORM\Table(name="author", indexes={@ORM\Index(name="author_name_id_idx", columns={"id"})}) 
* @ORM\Entity 
*/ 
class Author 
{ 

    /** 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="NONE") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", author="string", length=255, nullable=false) 
    */ 
    private $name; 


/** 
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Exploit", mappedBy="author", cascade={"persist", "remove"}) 
* @ORM\JoinColumn(name="exploits", referencedColumnName="id") 
*/ 
private $exploits; 

/** 
* Author constructor. 
*/ 
public function __construct() 
{ 
    $this->exploits = new ArrayCollection(); 
} 

    /** 
    * Set name 
    * 
    * @param string $name 
    * 
    * @return Author 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * Get id 
    * 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    public function __toString() 
    { 
     return $this->name; 
    } 


/** 
* @param Exploits $exploit 
* 
* @return Author 
*/ 
public function addExploit($exploit) 
{ 
     $this->exploits->add($exploit); 

    return $this; 
} 

/** 
* @param Collection $exploits 
* 
* @return Author 
*/ 
public function setExploits(Collection $exploits) 
{ 
    $this->exploits->clear(); 

    foreach ($exploits as $exploit) { 
     $exploit->add($this); 
    } 

    $this->exploits = $exploits; 

    return $this; 
} 
} 
:::::::::::::: 
Category.php 
:::::::::::::: 
<?php 
namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use AppBundle\Entity\Exploit; 

/** 
* Category 
* 
* @ORM\Table(name="category", indexes={@ORM\Index(name="category_name_id_idx", columns={"id"})}) 
* @ORM\Entity 
*/ 
class Category 
{ 

    /** 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="NONE") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", category="string", length=255, nullable=false) 
    */ 
    private $name; 


/** 
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Exploit", mappedBy="category", cascade={"persist", "remove"}) 
* @ORM\JoinColumn(name="exploits", referencedColumnName="id") 
*/ 
private $exploits; 

/** 
* Author constructor. 
*/ 
public function __construct() 
{ 
    $this->exploits = new ArrayCollection(); 
} 

    /** 
    * Set name 
    * 
    * @param string $name 
    * 
    * @return Author 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * Get id 
    * 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    public function __toString() 
    { 
     return $this->name; 
    } 


/** 
* @param Exploits $exploit 
* 
* @return Author 
*/ 
public function addExploit($exploit) 
{ 
     $this->exploits->add($exploit); 

    return $this; 
} 

/** 
* @param Collection $exploits 
* 
* @return Author 
*/ 
public function setExploits(Collection $exploits) 
{ 
    $this->exploits->clear(); 

    foreach ($exploits as $exploit) { 
     $exploit->add($this); 
    } 

    $this->exploits = $exploits; 

    return $this; 
} 
} 
:::::::::::::: 
Exploit.php 
:::::::::::::: 
<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use AppBundle\Entity\Author; 
use AppBundle\Entity\Type; 
use AppBundle\Entity\Category; 

/** 
* Exploit 
* 
* @ORM\Table(name="exploit", indexes={@ORM\Index(name=exploit_category_idx", columns={"category"}), @ORM\Index(name="exploit_type_idx", columns={"type"}), @ORM\Index(name="exploit_author_idx", columns={" 
author"})}) 
*/ 
class Exploit 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="bigint", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="edb_id", type="string", length=100, nullable=false) 
    */ 
    private $edbId; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="date", type="datetime", nullable=false) 
    */ 
    private $date; 

    /** 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Author", inversedBy="exploits") 
    * @ORM\JoinColumn(name="author", referencedColumnName="id") 
    */ 
    private $author; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255, nullable=false) 
    */ 
    private $name; 

    /** 
    * @var integer 
    * 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Category", inversedBy="exploits") 
    * @ORM\JoinColumn(name="category", referencedColumnName="id") 
    */ 
    private $category; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="version", type="string", length=255, nullable=false) 
    */ 
    private $version; 

    /** 
    * @var integer 
    * 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Type", inversedBy="exploits") 
    * @ORM\JoinColumn(name="type", referencedColumnName="id") 
    */ 
    private $type; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="content", type="text", nullable=false) 
    */ 
    private $content; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="dork", type="string", length=255, nullable=true) 
    */ 
    private $dork; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="software_link", type="string", length=255, nullable=true) 
    */ 
    private $softwareLink; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="tested_on", type="string", length=255, nullable=true) 
    */ 
    private $testedOn; 



    /** 
    * Set edbId 
    * 
    * @param integer $edbId 
    * 
    * @return Exploit 
    */ 
    public function setEdbId($edbId) 
    { 
     $this->edbId = $edbId; 

     return $this; 
    } 

    /** 
    * Get edbId 
    * 
    * @return integer 
    */ 
    public function getEdbId() 
    { 
     return $this->edbId; 
    } 

    /** 
    * Set date 
    * 
    * @param \DateTime $date 
    * 
    * @return Exploit 
    */ 
    public function setDate($date) 
    { 
     $this->date = $date; 

     return $this; 
    } 

    /** 
    * Get date 
    * 
    * @return \DateTime 
    */ 
    public function getDate() 
    { 
     return $this->date; 
    } 

    /** 
    * Set author 
    * 
    * @param integer $author 
    * 
    * @return Exploit 
    */ 
    public function setAuthor($author) 
    { 
     $this->author = $author; 

     return $this; 
    } 

    /** 
    * Get author 
    * 
    * @return integer 
    */ 
    public function getAuthor() 
    { 
     return $this->author; 
    } 

    /** 
    * Set name 
    * 
    * @param string $name 
    * 
    * @return Exploit 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * Set category 
    * 
    * @param integer $category 
    * 
    * @return Exploit 
    */ 
    public function setCategory($category) 
    { 
     $this->category = $category; 

     return $this; 
    } 

    /** 
    * Get category 
    * 
    * @return integer 
    */ 
    public function getCategory() 
    { 
     return $this->category; 
    } 

    /** 
    * Set version 
    * 
    * @param string $version 
    * 
    * @return Exploit 
    */ 
    public function setVersion($version) 
    { 
     $this->version = $version; 

     return $this; 
    } 

    /** 
    * Get version 
    * 
    * @return string 
    */ 
    public function getVersion() 
    { 
     return $this->version; 
    } 

    /** 
    * Set type 
    * 
    * @param integer $type 
    * 
    * @return Exploit 
    */ 
    public function setType($type) 
    { 
     $this->type = $type; 

     return $this; 
    } 

    /** 
    * Get type 
    * 
    * @return integer 
    */ 
    public function getType() 
    { 
     return $this->type; 
    } 

    /** 
    * Set content 
    * 
    * @param string $content 
    * 
    * @return Exploit 
    */ 
    public function setContent($content) 
    { 
     $this->content = $content; 

     return $this; 
    } 

    /** 
    * Get content 
    * 
    * @return string 
    */ 
    public function getContent() 
    { 
     return $this->content; 
    } 

    /** 
    * Set dork 
    * 
    * @param string $dork 
    * 
    * @return Exploit 
    */ 
    public function setDork($dork) 
    { 
     $this->dork = $dork; 

     return $this; 
    } 

    /** 
    * Get dork 
    * 
    * @return string 
    */ 
    public function getDork() 
    { 
     return $this->dork; 
    } 

    /** 
    * Set softwareLink 
    * 
    * @param string $softwareLink 
    * 
    * @return Exploit 
    */ 
    public function setSoftwareLink($softwareLink) 
    { 
     $this->softwareLink = $softwareLink; 

     return $this; 
    } 

    /** 
    * Get softwareLink 
    * 
    * @return string 
    */ 
    public function getSoftwareLink() 
    { 
     return $this->softwareLink; 
    } 

    /** 
    * Set testedOn 
    * 
    * @param string $testedOn 
    * 
    * @return Exploit 
    */ 
    public function setTestedOn($testedOn) 
    { 
     $this->testedOn = $testedOn; 

     return $this; 
    } 

    /** 
    * Get testedOn 
    * 
    * @return string 
    */ 
    public function getTestedOn() 
    { 
     return $this->testedOn; 
    } 

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 
} 
:::::::::::::: 
Type.php 
:::::::::::::: 
<?php 
namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use AppBundle\Entity\Exploit; 

/** 
* Type 
* 
* @ORM\Table(name="type", indexes={@ORM\Index(name="type_name_id_idx", columns={"id"})}) 
* @ORM\Entity 
*/ 
class Type 
{ 

    /** 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="NONE") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255, nullable=false) 
    */ 
    private $name; 


/** 
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Exploit", mappedBy="type", cascade={"persist", "remove"}) 
* @ORM\JoinColumn(name="exploits", referencedColumnName="id") 
*/ 
private $exploits; 

/** 
* Type constructor. 
*/ 
public function __construct() 
{ 
    $this->exploits = new ArrayCollection(); 
} 

    /** 
    * Set name 
    * 
    * @param string $name 
    * 
    * @return Type 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * Get id 
    * 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    public function __toString() 
    { 
     return $this->name; 
    } 


/** 
* @param Exploits $exploit 
* 
* @return Type 
*/ 
public function addExploit($exploit) 
{ 
     $this->exploits->add($exploit); 

    return $this; 
} 

/** 
* @param Collection $exploits 
* 
* @return Type 
*/ 
public function setExploits(Collection $exploits) 
{ 
    $this->exploits->clear(); 

    foreach ($exploits as $exploit) { 
     $exploit->add($this); 
    } 

    $this->exploits = $exploits; 

    return $this; 
} 

} 

,但不知何故,当我进行查询,我得到,如:

$exploits = $this->getDoctrine() 
      ->getRepository('AppBundle:Exploit') 
      ->findAll(); 

and in view

<th scope="row"> {{ exploit.id }} </th> 
     <td> {{ exploit.name }} </td> 
     <td> {{ exploit.author.name }} </td> 
     <td> {{ exploit.type.name }} </td> 
     <td> {{ exploit.category.name }} </td> 
     <td>{{ exploit.date|date('F j, Y, g:i a') }}</td> 

我得到这个错误:

Impossible to access an attribute ("name") on a integer variable ("1"). 

任何一个优秀的灵魂一下,并尝试重现呢?

MySQL的转储重新创建表的内容是在这里:

https://0bin.net/paste/2tV3MEw4A2tdAVsR#R3rBNW4seWkK9HtlJFwbsA6+RmhhWPilm40L8QfeiTp

谢谢!

它说它就在那里,你试图访问某个东西的name属性,但是某些东西不是一个对象。它的一个1

您访问.name几次这样不确定其中哪一个是没有更多的信息和行号

<th scope="row"> {{ exploit.id }} </th> 
    <td> {{ exploit.name }} </td> 
    <td> {{ exploit.author.name }} </td> 
    <td> {{ exploit.type.name }} </td> 
    <td> {{ exploit.category.name }} </td> 
    <td>{{ exploit.date|date('F j, Y, g:i a') }}</td> 
</th> 

但是,如果我们假定其Author那么它明确指出,getAuthor()方法返回一个bigint

你是如何得到该实体代码和数据库代码的?因为他们看起来不正确,他们正在获取和设置整数,而不是对象。

UPDATE

php bin/console doctrine:generate:entities AppBundle 

查看使用

php bin/console doctrine:schema:update --dump-sql 

使用执行SQL的SQL生成实体

php bin/console doctrine:schema:update --force 
+0

谢谢!你在那里得到了重点。我确实手工创建了数据库。起初我从数据库(2 Symfony命令)创建了实体,并且在阅读教程和SO答案之后进行了调整。如何根据我的数据库方案生成适当的实体,或者如何调整它以适合我当前的实体?十分感谢! –

+0

:/仍然相同...不能访问整数变量(“1”)上的属性(“名称”) –

+0

我使用其他Python脚本填充数据库......这可能是问题吗? –

了它与这些实体的工作:

:::::::::::::: 
Author.php 
:::::::::::::: 
<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use AppBundle\Entity\Exploit; 

/** 
* User 
* 
* @ORM\Table(name="author") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository") 
*/ 
class Author 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="a_id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $a_id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255, nullable=false) 
    */ 
    private $name; 

    /** 
    * @ORM\OneToMany(targetEntity="Exploit", mappedBy="author") 
    */ 
    protected $exploits; 

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

    public function addExploit(\AppBundle\Entity\Exploit $exploit) 
    { 
     $this->report[] = $exploit; 
    } 

    public function getExploits() 
    { 
     return $this->exploits; 
    } 
    /** 
    * Set name 
    * 
    * @param string $name 
    * 
    * @return Type 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

} 

:::::::::::::: 
Category.php 
:::::::::::::: 
<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use AppBundle\Entity\Exploit; 

/** 
* Category 
* 
* @ORM\Table(name="category") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\CategoryRepository") 
*/ 
class Category 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="c_id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $c_id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255, nullable=false) 
    */ 
    private $name; 

/** 
    * @ORM\OneToMany(targetEntity="Exploit", mappedBy="category") 
    */ 
    protected $exploits; 

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

    public function addExploit(\AppBundle\Entity\Exploit $exploit) 
    { 
     $this->report[] = $exploit; 
    } 

    public function getExploits() 
    { 
     return $this->exploits; 
    } 

    /** 
    * Set name 
    * 
    * @param string $name 
    * 
    * @return Type 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

} 

:::::::::::::: 
Exploit.php 
:::::::::::::: 
<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use AppBundle\Entity\Author; 

/** 
* Exploit 
* 
* @ORM\Table(name="exploit") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\ReportRepository") 
*/ 
class Exploit 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="e_id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $e_id; 

    /** 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Author", inversedBy="exploi 
ts") 
    * @ORM\JoinColumn(name="author_id", referencedColumnName="a_id") 
    */ 
    protected $author; 

    public function setAuthor(\AppBundle\Entity\Author $author) 
    { 
     $this->author = $author; 
    } 

    public function getAuthor() 
    { 
     return $this->author; 
    } 

     /** 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Category", inversedBy="expl 
oits") 
    * @ORM\JoinColumn(name="category_id", referencedColumnName="c_id") 
    */ 
    protected $category; 

    public function setCategory(\AppBundle\Entity\Category $category) 
    { 
     $this->category = $category; 
    } 

    public function getCategory() 
    { 
     return $this->category; 
    } 

     /** 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Type", inversedBy="exploits 
") 
    * @ORM\JoinColumn(name="type_id", referencedColumnName="t_id") 
    */ 
    protected $type; 

    public function setType(\AppBundle\Entity\Type $type) 
    { 
     $this->type = $type; 
    } 

    public function getType() 
    { 
     return $this->type; 
    } 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="edb_id", type="string", length=100, nullable=false) 
    */ 
    private $edbId; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="date", type="datetime", nullable=false) 
    */ 
    private $date; 


    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255, nullable=false) 
    */ 
    private $name; 
    /** 
    * @var string 
    * 
    * @ORM\Column(name="version", type="string", length=255, nullable=false) 
    */ 
    private $version; 
     /** 
    * @var string 
    * 
    * @ORM\Column(name="content", type="text", nullable=false) 
    */ 
    private $content; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="dork", type="string", length=255, nullable=true) 
    */ 
    private $dork; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="software_link", type="string", length=255, nullable=tru 
e) 
    */ 
    private $softwareLink; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="tested_on", type="string", length=255, nullable=true) 
    */ 
    private $testedOn; 

    /** 
    * Set edbId 
    * 
    * @param integer $edbId 
    * 
    * @return Exploit 
    */ 
    public function setEdbId($edbId) 
    { 
     $this->edbId = $edbId; 

     return $this; 
    } 

    /** 
    * Get edbId 
    * 
    * @return integer 
    */ 
    public function getEdbId() 
    { 
     return $this->edbId; 
    } 

    /** 
    * Set date 
    * 
    * @param \DateTime $date 
    * 
    * @return Exploit 
    */ 
    public function setDate($date) 
    { 
     $this->date = $date; 

     return $this; 
    } 

    /** 
    * Get date 
    * 
    * @return \DateTime 
    */ 
    public function getDate() 
    { 
     return $this->date; 
    } 
/** 
    * Set name 
    * 
    * @param string $name 
    * 
    * @return Exploit 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 
/** 
    * Set version 
    * 
    * @param string $version 
    * 
    * @return Exploit 
    */ 
    public function setVersion($version) 
    { 
     $this->version = $version; 

     return $this; 
    } 

    /** 
    * Get version 
    * 
    * @return string 
    */ 
    public function getVersion() 
    { 
     return $this->version; 
    } 
/** 
    * Set content 
    * 
    * @param string $content 
    * 
    * @return Exploit 
    */ 
    public function setContent($content) 
    { 
     $this->content = $content; 

     return $this; 
    } 

    /** 
    * Get content 
    * 
    * @return string 
    */ 
    public function getContent() 
    { 
     return $this->content; 
    } 

    /** 
    * Set dork 
    * 
    * @param string $dork 
    * 
    * @return Exploit 
    */ 
    public function setDork($dork) 
    { 
     $this->dork = $dork; 

     return $this; 
    } 

    /** 
    * Get dork 
    * 
    * @return string 
    */ 
    public function getDork() 
    { 
     return $this->dork; 
    } 

    /** 
    * Set softwareLink 
    * 
    * @param string $softwareLink 
    * 
    * @return Exploit 
    */ 
    public function setSoftwareLink($softwareLink) 
    { 
     $this->softwareLink = $softwareLink; 

     return $this; 
    } 

    /** 
    * Get softwareLink 
    * 
    * @return string 
    */ 
    public function getSoftwareLink() 
    { 
     return $this->softwareLink; 
    } 

    /** 
    * Set testedOn 
    * 
    * @param string $testedOn 
    * 
    * @return Exploit 
    */ 
    public function setTestedOn($testedOn) 
    { 
     $this->testedOn = $testedOn; 

     return $this; 
    } 

    /** 
    * Get testedOn 
    * 
    * @return string 
    */ 
    public function getTestedOn() 
    { 
     return $this->testedOn; 
    } 

    /** 
    * Get e_id 
    * 
    * @return integer 
    */ 
    public function gete_id() 
    { 
     return $this->e_id; 
    } 




} 

:::::::::::::: 
Type.php 
:::::::::::::: 
<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use AppBundle\Entity\Exploit; 

/** 
* Type 
* 
* @ORM\Table(name="type") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\TypeRepository") 
*/ 
class Type 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="t_id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $t_id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255, nullable=false) 
    */ 
    private $name; 
/** 
    * @ORM\OneToMany(targetEntity="Exploit", mappedBy="type") 
    */ 
    protected $exploits; 

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

    public function addExploit(\AppBundle\Entity\Exploit $exploit) 
    { 
     $this->report[] = $exploit; 
    } 

    public function getExploits() 
    { 
     return $this->exploits; 
    } 


    /** 
    * Set name 
    * 
    * @param string $name 
    * 
    * @return Type 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

} 

这一观点:

{% for exploit in exploits %} 
      <tr> 
       <th scope="row">{{ exploit.e_id }}</th> 
       <td>{{ exploit.name }}</td> 
       <td> {{ exploit.author.name }} </td> 
       <td> {{ exploit.category.name }} </td> 
       <td> {{ exploit.type.name }} </td> 

       <td> 
        <a href="/details/{{ exploit.e_id }}" class="btn btn-success">View</a> 
        <a href="/edit/{{ exploit.e_id }}" class="btn btn-default">Edit</a> 
        <a href="/delete/{{ exploit.e_id }}" class="btn btn-danger">Delete</a> 
       </td> 
      </tr> 
      {% endfor %} 

和控制器:

$exploits = $this->getDoctrine() 
    ->getRepository('AppBundle:Exploit') 
    ->findAll(); 

return $this->render('exploit/index.html.twig', array(
    'exploits' => $exploits 
));