Php Symfony 2实体存储库find()返回空数组
谢谢大家从现在开始的回答。这就是问题所在。我有一个symfony 2应用程序,有两个实体(任务和产品)。当我试图查找(findBy、findOneBy、findAll)一个产品时,它返回一个空数组 任务实体Php Symfony 2实体存储库find()返回空数组,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,谢谢大家从现在开始的回答。这就是问题所在。我有一个symfony 2应用程序,有两个实体(任务和产品)。当我试图查找(findBy、findOneBy、findAll)一个产品时,它返回一个空数组 任务实体 <?php namespace pablo\UserBundle\Entity; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Mapping as ORM; use Symfony\Co
<?php
namespace pablo\UserBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Task
*
* @ORM\Table(name="tasks")
* @ORM\Entity(repositoryClass="pablo\UserBundle\Repository\TaskRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Task
{
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="tasks")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE")
*/
protected $user;
/**
* @ORM\ManyToOne(targetEntity="Product", inversedBy="task")
* @ORM\JoinColumn(name="product_id", referencedColumnName="id", onDelete="CASCADE")
*/
protected $product;
public function __construct()
{
$this->tasks = new ArrayCollection();
}
/**
* Set product
*
* @param \pablo\UserBundle\Entity\Product $product
*
* @return Task
*/
public function setProduct(\pablo\UserBundle\Entity\Product $product = null)
{
$this->product = $product;
return $this;
}
/**
* Get product
*
* @return \pablo\UserBundle\Entity\Product
*/
public function getProduct()
{
return $this->product;
}
/**
* @return ArrayCollection
*/
public function getTasks()
{
return $this->tasks;
}
/**
* @param ArrayCollection $tasks
*/
public function setTasks($tasks)
{
$this->tasks = $tasks;
}
实际上,您有一个结果,它只是一个空对象,因为您没有定义应该打印哪些属性 最好的解决方案是让您的实体实现JsonSerializable
class Product implements \JsonSerializable
{
...
public function jsonSerialize()
{
return [
"id"=> $this->getId(),
"name" => $this->getProductsName()
];
}
现在它知道了在将类转换为json对象时应该打印什么
如果还需要任务集合,请为任务实体和外接程序产品实体实现JsonSerializable:
public function jsonSerialize()
{
return [
"id"=> $this->getId(),
"name" => $this->getProductsName(),
"task" => $this->getTask()->toArray()
];
}
您可以在打印对象的地方添加代码吗?这是controller返回的(从Ajax调用)->返回新的JsonResponse(['success'=>1,'product'=>$product]);这是浏览器->{“成功”:1,“产品”:{}}OMG@Jannes你现在是我的英雄!!它工作得很好。
class Product implements \JsonSerializable
{
...
public function jsonSerialize()
{
return [
"id"=> $this->getId(),
"name" => $this->getProductsName()
];
}
public function jsonSerialize()
{
return [
"id"=> $this->getId(),
"name" => $this->getProductsName(),
"task" => $this->getTask()->toArray()
];
}