私は在庫システムを作成しています。そして、私は、ResultSetMappingを使って在庫の残高を表示したかったのです。 私はhttp://doctrine-orm.readthedocs.io/en/latest/reference/native-sql.html#examples に示す例に従ってくださいしかし、私は「クラスのRequestItem 'が存在しません - 500内部サーバーエラー - MappingException「エラーましSymfony 3:ResultSetMappingがマッピング例外エラーを生成します
namespace ECA\InventoryBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use ECA\InventoryBundle\Entity\RequestItem;
use ECA\InventoryBundle\Form\RequestItemType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Doctrine\ORM\Query\ResultSetMapping;
/**
* RequestItem controller.
*
* @Route("/requestitem")
*/
class RequestItemController extends Controller
{
/**
* Calculate and display balance
*
*@Route("/balance", name="requestitem_balance")
*@Method("GET")
*/
public function balanceAction()
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('RequestItem', 'r');
$rsm->addFieldResult('r','item_id', 'id');
$rsm->addScalarResult('SUM(r.quantity)', 'used');
$rsm->addJoinedEntityResult('Item' , 'i', 'r','item');
$rsm->addFieldResult('i', 'name','name');
$rsm->addFieldResult('i', 'quantity','quantity');
$rsm->addScalarResult('(i.quantity - SUM(r.quantity))', 'balance');
$sql = "SELECT i.name, r.item_id, i.quantity, SUM(r.quantity) AS used,
(i.quantity - SUM(r.quantity)) AS balance
FROM request_item r INNER JOIN item i ON i.id=r.item_id GROUP BY r.item_id";
$em = $this->getDoctrine()->getManager();
$query = $em->createNativeQuery($sql, $rsm);
$itemBalance = $query->getResult();
$form = $this->createFormBuilder($itemBalance)
->add('item_id', TextType::class, array('attr' =>array('class' =>'form-control', 'style' =>'margin-bottom:15px')))
->add('name', TextType::class, array('attr' =>array('class' =>'form-control', 'style' =>'margin-bottom:15px')))
->add('quantity', TextType::class, array('attr' =>array('class' =>'form-control', 'style' =>'margin-bottom:15px')))
->add('used', TextType::class, array('attr' =>array('class' =>'form-control', 'style' =>'margin-bottom:15px')))
->add('balance', TextType::class, array('attr' =>array('class' =>'form-control', 'style' =>'margin-bottom:15px')))
->getForm();
return $this->render('requestitem/balance.html.twig', array('itemBalance'=> $itemBalance, 'form' => $form->createView()));
}
をしかし、クラスRequestItemは
namespace ECA\InventoryBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* RequestItem
*
* @ORM\Table(name="request_item")
* @ORM\Entity(repositoryClass="ECA\InventoryBundle\Repository\RequestItemRepository")
*/
class RequestItem
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var \DateTime
*
* @ORM\Column(name="date", type="date")
*/
private $date;
/**
* @var int
*
* @ORM\Column(name="quantity", type="integer")
*/
private $quantity;
/**
* @var string
*
* @ORM\Column(name="client", type="string", length=255)
*/
private $client;
/**
* @var string
*
* @ORM\Column(name="remark", type="text", nullable=true)
*/
private $remark;
/**
* @var \ECA\InventoryBundle\Entity\Item
*
* @ORM\ManyToOne(targetEntity="ECA\InventoryBundle\Entity\Item")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="item_id", referencedColumnName="id")
* })
*/
private $item;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set date
*
* @param \DateTime $date
*
* @return RequestItem
*/
public function setDate($date)
{
$this->date = $date;
return $this;
}
/**
* Get date
*
* @return \DateTime
*/
public function getDate()
{
return $this->date;
}
/**
* Set quantity
*
* @param integer $quantity
*
* @return RequestItem
*/
public function setQuantity($quantity)
{
$this->quantity = $quantity;
return $this;
}
/**
* Get quantity
*
* @return int
*/
public function getQuantity()
{
return $this->quantity;
}
/**
* Set client
*
* @param string $client
*
* @return RequestItem
*/
public function setClient($client)
{
$this->client = $client;
return $this;
}
/**
* Get client
*
* @return string
*/
public function getClient()
{
return $this->client;
}
/**
* Set remark
*
* @param string $remark
*
* @return RequestItem
*/
public function setRemark($remark)
{
$this->remark = $remark;
return $this;
}
/**
* Get remark
*
* @return string
*/
public function getRemark()
{
return $this->remark;
}
/**
* Set item
*
* @param \ECA\InventoryBundle\Entity\Item $item
*
* @return RequestItem
*/
public function setItem(\ECA\InventoryBundle\Entity\Item $item = null)
{
$this->item = $item;
return $this;
}
/**
* Get item
*
* @return \ECA\InventoryBundle\Entity\Item
*/
public function getItem()
{
return $this->item;
}
}
が存在します
私はXAMPP(PHP7)でSymfony3を使用しています。私はMysqlで私のクエリをテストし、期待どおりに動作します。
私は間違っていますか? ありがとう
に変更( 'ECAInventoryBundle:RequestItem'、 'r' を);今は $ itemBalance = $ query-> getArrayResult(); return新しい応答(dump($ itemBalance)); は、空の配列を返します。 Mysql(phpMyAdmin)のクエリは私に予想される出力を与えます。 – Eskinder