web-dev-qa-db-ja.com

プロパティの注釈「@OneToMany」はインポートされませんでした(Doctrine2)

Slim3のORMとしてDoctrine 2を使用していますが、双方向の関係を実装しようとすると、オブジェクトマッピングセクションでスタックし続けます

/**
 * Class Resource
 * @package App
 * @ORM\Entity
 * @ORM\Table(name="users", uniqueConstraints={@ORM\UniqueConstraint(name="user_id", columns={"user_id"})}))
 */
class User
{
    /**
     * @ORM\ManyToOne(targetEntity="UserRoles", inversedBy="users")
     * @ORM\JoinColumn(name="role_id", referencedColumnName="user_role_id")
     */
    protected $user_role;
}

/**
 * Class Resource
 * @package App
 * @ORM\Entity
 * @ORM\Table(name="user_roles", uniqueConstraints={@ORM\UniqueConstraint(name="user_role_id", columns={"user_role_id"})}))
 */
class UserRoles
{
    /**
     * @ORM\OneToMany(targetEntity="User", mappedBy="user_role")
     */
    protected $users;

    public function __construct()
    {
        $this->users = new ArrayCollection();
    }
}    

php vendor/bin/doctrine orm:schema-tool:update --forceを試してみると例外が発生します

出力は次のとおりです。

[Doctrine\Common\Annotations\AnnotationException] [セマンティックエラー]プロパティApp\Entity\UserRoles :: $ usersの注釈 "@OneToMany"はインポートされませんでした。この注釈に「use」ステートメントを追加するのを忘れたのではないでしょうか。

8
clifford_owino

のような教義のクラス

Doctrine\ORM\Mapping名前空間の一部です。

ORMをエイリアスとしてこの名前空間をインポートする必要があります。次に、これらのクラスを機能させるために、これらのクラスの前にアノテーションとして@ORMを追加する必要があります。

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\ManyToOne(...)
 * @ORM\JoinColumn(...)
 */

これらのクラスをすべて使用したい場合は、それぞれを個別にインポートする必要があります。

use Doctrine\ORM\Mapping\ManyToOne;
use Doctrine\ORM\Mapping\JoinColumn;

/**
 * @ManyToOne(...)
 * @JoinColumn(...)
 */
24
danopz