我正在尝试将ID从一个国家/地区表传递到用户表,但我无法传递此错误。
关联字段“ ProjectBundle \ Base \ Entity \ User#$ country”的类型为“ ProjectBundle \ Base \ Entity \ Country”的预期值,改为使用“字符串”。
我的用户实体类
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @Groups({"user_data"})
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Country")
* @JoinColumn(name="country_id", referencedColumnName="id")
*/
private $country;
/**
* @return mixed
*/
public function getCountry()
{
return $this->country;
}
/**
* @param mixed $country
*/
public function setCountry($country)
{
$this->country = $country;
}
我的用户服务
public function registerUser($country)
{
$user = new User();
$user->setCountry($country);
$this->em->persist($user);
$this->em->flush();
return $user;
}
我的用户控制器
public function registerUserAction()
{
$this->requirePostParams(['country_id']);
$country = $this->data['country_id'];
$user = $this->get('member')->registerUser($country);
return $this->success($user);
}
所以我通过邮递员传递country_id值,但出现此错误。
答案 0 :(得分:0)
$user->setCountry($country);
您在USER
实体中将国家/地区定义为类,因此需要将国家/地区分配为对象而不是字符串。您正在传递字符串而不是国家对象。
在registerUser($country)
中传递国家对象而不是字符串,它不会出现此异常。
答案 1 :(得分:0)
问题在于
$user->setCountry()
期望您的国家实体的实例。但是您尝试用一个国家的ID来调用它。教义不会从给定的ID中获取实体。
要解决此问题,您有两个选择:
使用ID提取国家/地区
在您的用户服务中:
public function registerUser($countryId)
{
$country = $this->countryRepository->findById($countryId);
$user = new User();
$user->setCountry($country);
$this->em->persist($user);
$this->em->flush();
return $user;
}
您必须在服务中添加CountryRepository作为依赖项。
将countryID列作为属性添加到您的UserEntity
在您的用户实体中:
/**
* @var int
*
* @ORM\Column(name="country_id", type="integer", nullable=true)
*/
protected $countryId;
/**
* @return int
*/
public function getCountryId()
{
return $this->countryId;
}
/**
* @param int $countryId
*/
public function setCountryId($countryId)
{
$this->countryId = $countryId;
}
在您的用户服务中:
public function registerUser($countryId)
{
$user = new User();
$user->setCountryId($countryId);
$this->em->persist($user);
$this->em->flush();
return $user;
}