【问题标题】:Updating an Entity in Command with Symfony使用 Symfony 更新命令中的实体
【发布时间】:2018-05-04 10:15:16
【问题描述】:

我正在尝试使用 Symfony 3.4 创建控制台命令。基本上是通过控制台添加角色。

首先,我可以通过ContainerAwareCommand获得教义

$em = $this->getContainer()->get('doctrine')->getManager();

然后像这样从输入中获取用户对象

$user = $em->getRepository(User::class)->findByUsername($username);

此行的错误显示:

$user->setRole($role);

错误:

Error: Call to a member function setRole()

实体:

/**
  * @ORM\Column(name="role", type="string", nullable=true)
  */
  private $role;
 .....
  public function setRole($role)
    {
        $this->role = $role;

        return $this;
    }
    ...

【问题讨论】:

  • 你能显示你的用户实体吗?角色是其他对象的引用吗?你有用户实体中的方法setRole()吗?
  • 添加了非常标准的字符串类型和设置器。我也在其他二传手上尝试过,也收到了同样的问题。
  • 你能在$user->setRole() 调用之前添加get_class($user) 的输出吗?您是否在检查您的方法是否返回 null 值(例如,未找到用户)?
  • 天啊! @ccKep,你肯定把我引向了正确的道路。结果表明 $user 不是对象而是数组。是啊,我说什么???然后我发现我用findByUsername而不是findOneByUsername。将此作为答案和错误投票!谢谢!

标签: php symfony symfony-3.4 symfony-console


【解决方案1】:

回应您的 cmets:

->setRole调用之前通过get_class()查看$user进行调试导致它是一个数组的结论。

再次查看您的代码,您错误地使用了findByUsername(它返回一个结果数组)而不是findOneByUsername(它只返回一个结果或null)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 2018-02-11
    相关资源
    最近更新 更多