Php symfony2原则一个一个得到
我有课Php symfony2原则一个一个得到,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我有课 namespace Miejsce\ObiektyBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Miejsce * @ORM\Entity * @ORM\Table(name="mMiejsce") */ class Miejsce { ... /** * @var Lokalizacja $lokalizacja * @ORM\OneToOne(targetEntity="Miejsc
namespace Miejsce\ObiektyBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Miejsce
* @ORM\Entity
* @ORM\Table(name="mMiejsce")
*/
class Miejsce
{
...
/**
* @var Lokalizacja $lokalizacja
* @ORM\OneToOne(targetEntity="Miejsce\LokalizacjaBundle\Entity\Lokalizacja" , mappedBy="miejsce")
* @ORM\JoinColumn(name="id", referencedColumnName="id")
*/
protected $lokalizacja;
/**
* Get lokalizacja
*
* @return \Miejsce\LokalizacjaBundle\Entity\Lokalizacja
*/
public function getLokalizacja()
{
return $this->lokalizacja;
}
和lokalizacja
namespace Miejsce\LokalizacjaBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Miejsce\ObiektyBundle\Entity\Miejsce;
/**
* @ORM\Entity
*
* @ORM\Table(name="mLokalizacja")
*
*/
class Lokalizacja {
/**
* @var Miejsce
* @ORM\OneToOne(targetEntity="Miejsce\ObiektyBundle\Entity\Miejsce", inversedBy="lokalizacja")
* @ORM\JoinColumn(name="id", referencedColumnName="id")
*/
protected $miejsce;
我尝试在控制器中获取对象:
$miejsce = $this->getDoctrine()
->getRepository('MiejsceObiektyBundle:Miejsce')
->find(1);
var_dump($miejsce->getLokalizacja());
当nothave=*@ORM\JoinColumn(name=“id”,referencedColumnName=“id”)时,为空
在数据库中,我有mMiejsce.id=1和mLokalizacja.id
那么为什么这不连接这些元素呢?
我想获取miejsce对象,并已将lokalizacja-onetoone关系-id=id归档
我做错了什么
但当我按下*@ORM\JoinColumn(name=“id”,referencedColumnName=“id”)时
我得到:
类Miejsce\LokalizacjaBundle\Entity\Miejsce不存在
500内部服务器错误-ReflectionException
现在我有:
/**
* Miejsce
* @ORM\Entity
* @ORM\Table(name="mMiejsce")
*/
class Miejsce
{
/**
* @var integer
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var Lokalizacja $lokalizacja
* @ORM\OneToOne(targetEntity="Miejsce\LokalizacjaBundle\Entity\Lokalizacja", mappedBy="miejsce" )
* @ORM\JoinColumn(name="id", referencedColumnName="miejsce_id")
*/
protected $lokalizacja;
好的,现在我有:
/**
* Miejsce
* @ORM\Entity
* @ORM\Table(name="mMiejsce")
*/
class Miejsce
{
/**
* @var integer
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var Lokalizacja $lokalizacja
* @ORM\OneToOne(targetEntity="Miejsce\LokalizacjaBundle\Entity\Lokalizacja", mappedBy="miejsce" )
* @ORM\JoinColumn(name="id", referencedColumnName="miejsce_id")
*/
protected $lokalizacja;
及
数据库更新工作正常
php app/console doctrine:schema:update --force
Database schema updated successfully! "5" queries were executed
但仍然有:
Class Miejsce\LokalizacjaBundle\Entity\Miejsce does not exist
500 Internal Server Error - ReflectionException
这很奇怪-为什么doctrine/symfony试图在不同的包上找到这个类?(实体在其他捆绑包上?可能这是问题?根据,您需要指定如何映射关系(通过ID和对象)。以下是文档中的示例:
<?php
/** @Entity **/
class Customer
{
// ...
/**
* @OneToOne(targetEntity="Cart", mappedBy="customer")
**/
private $cart;
// ...
}
/** @Entity **/
class Cart
{
// ...
/**
* @OneToOne(targetEntity="Customer", inversedBy="cart")
* @JoinColumn(name="customer_id", referencedColumnName="id")
**/
private $customer;
// ...
}
下面是映射对象的setter/getter函数的外观。无论您尝试在Lokalizacja
内部创建新的Miejsce
,还是在Miejsce
内部创建新的Lokalizacja
,都应该包含完整的命名空间
public function setMiejsce(Miejsce\ObiektyBundle\Entity\Miejsce $miejsce)
{
$this->miejsce = $miejsce;
}
我确实喜欢你写的东西,但现在有-类Miejsce\LokalizacjaBundle\Entity\Miejsce不存在-为什么这个搜索Miejsce\LokalizacjaBundle\Entity\Miejsce这个类在Miejsce\ObiektyBundle\Entity不是lokalizacja\u id上?但是这个关系有miejsce.id=lokalizacja.id-没有附加行lokalizacja_id,只有primary-to-primaryLook在我为您编写的代码的编辑中。请注意
lokalizacja_id
?您必须在Miejsce
中使用该名称创建一个新变量,该变量将存储引用Lokalizacja
的ID。当使用JoinColumn
将id
用作这两个值时,您试图将Miejsce
的id
和Lokalizacja
的id
相互映射!不能将一列同时用作主键和外键。根据,在尝试定义Miejsce
类时,getter和setter函数可能未使用完整命名空间(反之亦然)。您是否尝试过使用php应用程序/控制台原则:generate:entities
来更新getter和setter函数?有关所需的setter函数的示例,请参见我的新编辑
public function setMiejsce(Miejsce\ObiektyBundle\Entity\Miejsce $miejsce)
{
$this->miejsce = $miejsce;
}