Symfony-类型“”的期望值改为“字符串”

时间:2018-07-11 09:02:20

标签: php mysql api symfony postman

我正在尝试将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值,但出现此错误。

2 个答案:

答案 0 :(得分:0)

$user->setCountry($country); 

您在USER实体中将国家/地区定义为类,因此需要将国家/地区分配为对象而不是字符串。您正在传递字符串而不是国家对象。

registerUser($country)中传递国家对象而不是字符串,它不会出现此异常。

答案 1 :(得分:0)

问题在于

$user->setCountry()

期望您的国家实体的实例。但是您尝试用一个国家的ID来调用它。教义不会从给定的ID中获取实体。

要解决此问题,您有两个选择:

  1. 使用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作为依赖项。

  2. 将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;
    }