Ponizej uproszczona struktura bazy danych:
fos_user id name surname -- orders id user_id order_payment_id order_shipment_id order_status_id
Ml\UserBundle\Entity\User.php
namespace Ml\UserBundle\Entity; use Gedmo\Mapping\Annotation as Gedmo; use Ml\FrontendBundle\Entity\Orders; use FOS\UserBundle\Model\User as BaseUser; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="fos_user") * @ORM\Entity(repositoryClass="Ml\UserBundle\Entity\UserRepository") */ class User extends BaseUser { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @var string * * @ORM\Column(name="name", type="string", length=50, nullable=true) */ private $name; /** * @var string * * @ORM\Column(name="surname", type="string", length=50, nullable=true) */ private $surname; /** * @ORM\OneToMany(targetEntity = "Ml\FrontendBundle\Entity\Orders", mappedBy = "user", cascade={"remove", "persist"}) * */ protected $orders; /** * Constructor */ public function __construct() { parent::__construct(); } /** * Get orders * * @return \Doctrine\Common\Collections\Collection */ public function getOrders() { return $this->orders; } public function __toString() { return (string) $this->getUsername(); } }
Ml\FrontendBundle\Entity\Orders.php
namespace Ml\FrontendBundle\Entity; use Ml\UserBundle\Entity\User; use Gedmo\Mapping\Annotation as Gedmo; use FOS\UserBundle\Model\User as BaseUser; use Doctrine\ORM\Mapping as ORM; /** * Orders * * @ORM\Table() * @ORM\Entity */ class Orders { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @Assert\NotBlank * @ORM\ManyToOne(targetEntity="Ml\UserBundle\Entity\User", inversedBy="orders") * @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false) * */ private $user; /** * @Assert\NotBlank * @ORM\ManyToOne(targetEntity="Payments", inversedBy="orders") * @ORM\JoinColumn(name="order_payment_id", referencedColumnName="id", nullable=false) * */ protected $orderPayment; /** * @Assert\NotBlank * @ORM\ManyToOne(targetEntity="Shipments", inversedBy="orders") * @ORM\JoinColumn(name="order_shipment_id", referencedColumnName="id", nullable=false) * */ protected $orderShipment; /** * @Assert\NotBlank * @ORM\ManyToOne(targetEntity="OrdersStatus", inversedBy="orders") * @ORM\JoinColumn(name="order_status_id", referencedColumnName="id", nullable=false) * */ protected $orderStatus; /** * @ORM\ManyToMany(targetEntity="Products", mappedBy="orders") */ private $products; /** * Constructor */ public function __construct() { $this->products = new \Doctrine\Common\Collections\ArrayCollection(); } /** * Set userId * * @param \Ml\FrontendBundle\Entity\Orders $userId * * @return Orders */ public function setUserId(\Ml\FrontendBundle\Entity\Orders $userId) { $this->user_id = $userId; return $this; } /** * Get userId * * @return \Ml\FrontendBundle\Entity\Orders */ public function getUserId() { return $this->user_id; } /** * Set user * * @param \Ml\UserBundle\Entity\User $user * * @return Orders */ public function setUser(\Ml\UserBundle\Entity\User $user) { $this->user = $user; return $this; } /** * Get user * * @return \Ml\UserBundle\Entity\User */ public function getUser() { return $this->user; } }
Fragment kodu w kontrolerze obslugujacym zamowienia:
$manager = $this->getDoctrine()->getManager(); $order = new Orders(); $orderPaymentId = $request->get('opid'); $paymentEntity = $manager->getRepository('MlFrontendBundle:Payments')->find($orderPaymentId); $order->setOrderPaymentId($paymentEntity); $orderShipmentId = $request->get('osid'); $shipmentEntity = $manager->getRepository('MlFrontendBundle:Shipments')->find($orderShipmentId); $order->setOrderShipmentId($shipmentEntity); $userId = $this->getUser()->getId(); // poprawnie zwraca id zalogowanego uzytkownika $userEntity = $manager->getRepository('MlUserBundle:User')->findOneById($userId); // zwraca obiekt $order->setUserId($userEntity); // problem z zapisem wartości $manager->persist($order); $manager->flush();
Podczas próby zapisu id użytkownika dostaję monit: "Argument 1 passed to Ml\FrontendBundle\Entity\Orders::setUserId() must be an instance of Ml\FrontendBundle\Entity\Orders, instance of Ml\UserBundle\Entity\User given, called in Ml\OrderBundle\Controller\DefaultController.php"
Gdzie robię błąd? Proszę o pomoc.