Mam problem z zapisem id zalogowanego uzytkownika do tabeli z zamowieniami.
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 Symfony\Component\Validator\Constraints
as Assert;
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.
Ten post edytował swiezak 15.01.2016, 21:00:45