我是PHP的新手。我开始使用symfony,但我有这个问题
/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @param \Doctrine\Common\Collections\Collection $carList
* @ORM\OneToMany(targetEntity="AppBundle\CarBundle\Entity\Car", mappedBy="name", cascade={"persist"})
*/
private $carList;
//getters and setters
}
*
* @ORM\Entity(repositoryClass="AppBundle\CarBundle\Repository\Entity\CarRepository")
* @ORM\Table(name="car")
*/
class Car
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*
*
*/
protected $id;
/**
* @ORM\Column(type="string", length=100)
* @ORM\ManyToOne(targetEntity="AppBundle\UserBundle\Entity\User" , inversedBy="carList")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $name;
//getters and setters
}
stacktrace说:
Symfony \ Component \ Debug \ Exception \ ContextErrorException:注意:未定义的索引:名称 在n / a
当我运行php bin / console doctrine:schema:validate
时[Mapping] FAIL - 实体类' AppBundle \ UserBundle \ Entity \ User' 映射无效: *关联AppBundle \ UserBundle \ Entity \ User#carList指的是拥有方字段AppBundle \ CarBundle \ Entity \ Car#name不是 定义为关联,但作为字段。 *关联AppBundle \ UserBundle \ Entity \ User#carList指的是拥有方字段Appbundle \ CarBundle \ Entity \ Car#name 不存在
我不知道最新情况,你能帮帮我吗?
答案 0 :(得分:0)
您正在将关联名称与列名混合。当您创建关联时,您不需要手动添加该关联的列,doctrine将为您解决这个问题。
这段代码(在Car类中)说$ name字段是car表中的普通文本列,当然这是错误的
* @ORM\Column(name="name",type="string", length=100)
您所描述的是一个用户可以拥有多辆汽车,而且许多汽车可以属于一个用户。然后我会打电话给协会老板和汽车,但你当然可以随意给他们打电话。请注意,您无需定义连接列。
/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @param \Doctrine\Common\Collections\Collection $cars
* @ORM\OneToMany(targetEntity="AppBundle\CarBundle\Entity\Car", mappedBy="owner", cascade={"persist"})
*/
private $cars;
public function __construct()
{
$this->cars = new \Doctrine\Common\Collections\ArrayCollection();
}
//getters and setters
}
/**
*
* @ORM\Entity(repositoryClass="AppBundle\CarBundle\Repository\Entity\CarRepository")
* @ORM\Table(name="car")
*/
class Car
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="AppBundle\UserBundle\Entity\User" , inversedBy="cars")
*/
private $owner;
//getters and setters
}
了解详情:Doctrine association mapping
希望有道理:)