Php 在symfony 3.3中添加外部约束后获取奇怪数据
我的应用程序中有两个简单的实体:产品和类别,它们通过多通关系关联:Php 在symfony 3.3中添加外部约束后获取奇怪数据,php,symfony,Php,Symfony,我的应用程序中有两个简单的实体:产品和类别,它们通过多通关系关联: <?php namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Product * * @ORM\Table(name="product") * @ORM\Entity */ class Product { /**
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Product
*
* @ORM\Table(name="product")
* @ORM\Entity
*/
class Product
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="description", type="text")
*/
private $description;
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="products")
* @ORM\KoinColumn(onDelete="CASCADE")
*/
private $category;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
*
* @return Product
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set description
*
* @param string $description
*
* @return Product
*/
public function setDescription($description)
{
$this->description = $description;
return $this;
}
/**
* Get description
*
* @return string
*/
public function getDescription()
{
return $this->description;
}
/**
* @return int
*/
public function getCategory()
{
return $this->category;
}
/**
* @param int $category
*/
public function setCategory($category)
{
$this->category = $category;
}
}
/**
* Category
*
* @ORM\Table(name="category")
* @ORM\Entity
*/
class Category
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
*
* @return Category
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
}
还有更多,这是不可能在这里完全呈现的。
如果有人建议我如何摆脱所有这些不必要的数据,只接收对象的属性,我将非常感激。
提前谢谢 之所以会出现这种情况,是因为默认情况下,条令将关联加载为对真实实体的引用的代理。然后,当您试图从该关联中获取数据时,Doctrine实际上从数据库中获取数据并将其水合物化。这通常被称为延迟加载,有助于提高性能 要解决此问题,您必须在关联上设置急取模式:
$qb = $repository->createQueryBuilder('p')->getQuery()->getArrayResult();
您可以使用查询生成器
use \Doctrine\Common\Util\Debug;
...
echo "<pre>";
Debug::dump($products);
...
要以数组形式获取结果,请为此使用Symfony序列化程序(或JMS序列化程序)
例如,您可以简单地将输出配置为实体的各种字段集(使用序列化组),隐藏一些字段并仅显示相关实体的ID
基本文件如下:
如果您想要比“print\r()”可读性更好的调试输出,可以使用
use\doctor\Common\Util\Debug;
...
回声“;
调试::转储($products);
...
在收集分类对象中的相关产品时,我也遇到一些问题。symfony的官方网站上有一个例子,比如收集数组中的所有产品,但这对我来说毫无意义。有什么问题?为什么它对您没有意义?首先,我无法想象它必须如何使用参数,其次,当我尝试复制并超越这些参数时,我的php storm不会为此生成getter和setter。但下面的示例中,它显示了如何接收数据:公共函数showProductsAction($categoryId){$category=$this->getDoctrine()->getRepository(Category::class)->find($categoryId);$products=$Category->getProducts();/…}您可以手动添加setter/getter。在你们写的例子中,你们得到了一个类别,然后是该类别的所有产品,这似乎是合乎逻辑的。非常感谢。现在一切都好了。
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="products", fetch="EAGER")
*/
private $category;
$qb = $repository->createQueryBuilder('p')->getQuery()->getArrayResult();
use \Doctrine\Common\Util\Debug;
...
echo "<pre>";
Debug::dump($products);
...