过了一会儿,我又回到了教义上。我对教义和交响乐有一些问题,我完全想不通,为什么会这样。帮忙会很好。
我有两个实体:1. 类别:
/**
* @var integer
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORMOneToMany(targetEntity="Items", mappedBy="category")
*/
private $items;
public function __construct()
{
$this->items = new DoctrineCommonCollectionsArrayCollection();
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
*
* @param Items $items
* @return Category
*/
public function addItem(Items $item)
{
$this->items[] = $item;
return $this;
}
/**
*
* @param Items $item
*/
public function removeItem(Items $item)
{
$this->items->removeElement($item);
}
/**
* @return Items
*/
public function getItems()
{
return $this->items;
}
其次是:物品
/**
* @var integer
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer
*
* @ORMManyToOne(targetEntity="Category", inversedBy="items")
* @ORMJoinColumn(name="category_id", referencedColumnName="id")
*/
private $category;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set category
*
* @param Category $category
* @return Items
*/
public function setCategory(Category $category = null)
{
$this->category = $category;
return $this;
}
/**
* Get category
*
* @return Category
*/
public function getCategory()
{
return $this->category;
}
现在在控制器中,我只是尝试通过类别检索项目:
$categories = $em->getRepository('Category')->findAll();
//just example
foreach ($categories as $category) {
print_r($category->getItems());
}
$category->getItems() 是否应该返回该类别的 Items ?还是我幻想它应该起作用?请指教。
它目前返回 null,但不会返回错误,尽管数据库中有数据。
表结构为:
CREATE TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8
和
CREATE TABLE `items` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`category_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_category` (`category_id`),
CONSTRAINT `fk_category` FOREIGN KEY (`category_id`) REFERENCES `Category` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8
谢谢
在添加项目时设置项目的类别,否则它将作为NULL
而不是类别 ID 保存在数据库中。
/**
*
* @param Items $items
* @return Category
*/
public function addItem(Items $item)
{
$item->setCategory($this);
$this->items[] = $item;
return $this;
}
2年后。我也希望通过最新的Symfony和Doctrine以及$category->getItems()
我必须做的是,在您的情况下:
控制器:
$items = $em->getRepository('AppBundle:Items')->findByCategory($category);
出于某种原因,->getItems() 为空。
尝试:
DoctrineCommonUtilDebug::dump($category->getItems());
而不是
print_r($category->getItems());
当我尝试dump()
功能时,由于某种原因它不会转储结果时,我遇到了同样的问题