@OneToOne и @JoinColumn выдают ожидаемое значение типа ... исключение - PullRequest
0 голосов
/ 29 апреля 2019

Когда я следую документации Doctrine для @OneToOne и @JoinColumn, чтобы создать два класса сущностей ORM, а затем пытаюсь сбросить постоянную операцию, я получаю следующую ошибку:

Ожидаемое значение типа "App \ Entity \ UserObject "для поля ассоциации" App \ Entity \ LoginObject # $ username ", вместо этого получил" string ".

Я попытался передать строку с именем пользователя и передать в ORMЭкземпляр объекта сущности объекта пользователя, который выдает ошибку, что объект входа в систему ожидает строку.В любом случае я не могу этого сделать.UserObject содержит запись пользователя.Объект LoginObject содержит метку времени события входа в систему, где имя пользователя является внешним ключом в таблице пользователей.

// UserObject.php:
class UserObject
...
    /**
     * @ORM\Column(type="text", unique=true)
     */
    private $username;

    public function getUsername(): ?string
    {
        return $this->username;
    }

    public function setUsername(string $username): self
    {
        $this->username = $username;

        return $this;
    }
...
// LoginObject.php:
   /**
     * @ORM\OneToOne(targetEntity="UserObject")
     * @ORM\JoinColumn(name="username", referencedColumnName="username")
     */
    private $username;

    public function getUsername(): ?string
    {
        return $this->username;
    }

    public function setUsername(string $username): self
    {
        $this->username = $username;

        return $this;
    }

Мои ожидаемые результаты состоят в том, что я ожидал, что объект входа в систему будет вставлен в базу данных какНовая запись, однако это не так, любые советы будут полезны.Спасибо.

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Судя по всему, вы не совсем следовали документации . Я предлагаю вам прочитать это снова, но немного медленнее;) Сравните это с:

class User {
    // make this the primary key (@ORM\ID)
    private $id;

    /**
     * @ORM\OneToOne(targetEntity="Login", mappedBy="user")
     */
    private $login;

    public function getLogin(): ?Login
    {
        return $this->login;
    }

    public function setLogin(Login $login): self
    {
        $this->login = $login;

        return $this;
    }

    // ...
}
class Login {
    // make this the primary key (@ORM\ID)
    private $id;

    /**
     * @ORM\OneToOne(targetEntity="User", inversedBy="login")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;

    /**
     * @ORM\Column(type="string", nullable=false, unique=true)
     */
    private $username;

    public function getUser(): ?User
    {
        return $this->user;
    }

    public function setUser(User $user): self
    {
        $this->user = $user;

        return $this;
    }

    public function getUsername(): ?string
    {
        return $this->username;
    }

    public function setUsername(string $username): self
    {
        $this->username = $username;

        return $this;
    }

    // extra
    public function __invoke(): string
    {
        return $this->getUsername();
    }

    // ...
}
0 голосов
/ 30 апреля 2019

IIRC, вам нужно установить $ username в LoginObject для экземпляра UserObject, а не для строки.
Проверьте эту страницу в документации Symfony .

...