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」ステートメントを追加するのを忘れたのではないでしょうか。
のような教義のクラス
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(...)
*/