Zend Framework 2 を理解しようとしています。そのために、Ron Allen のチュートリアル http://akrabat.com/getting-started-with-zend-framework-2/ から始めました 。://www.jasongrimes.org/2012/01/using-doctrine-2-in-zend-framework-2/ わかり ました、その前にもっと複雑にすることにしました。
データベースを次のように変更します。
--
-- Estrutura da tabela `album`
--
CREATE TABLE IF NOT EXISTS `album` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`artist_id` int(11) NOT NULL,
`title` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
KEY `artist` (`artist_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;
--
-- Estrutura da tabela `artist`
--
CREATE TABLE IF NOT EXISTS `artist` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
私のアプリケーションはこの構造を持っています:
module
Album
src
Album
Controller
AlbumController.php
Entity
Album.php
Artist
src
Artist
Controller
ArtistController.php
Entity
Artist.php
私の新しいエンティティはそのようなものです:
class Album {
/**
* @ORM\Id
* @ORM\Column(type="integer");
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $title;
/**
* @ORM\ManyToOne(targetEntity="Artist", inversedBy="album")
* @ORM\JoinColumn(name="artist_id", referencedColumnName="id")
*/
protected $artist;
...
}
class Artist {
/**
* @ORM\Id
* @ORM\Column(type="integer");
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $name;
/**
* @ORM\OneToMany(targetEntity="Album", mappedBy="artist")
*/
protected $album;
public function __construct()
{
$this->album = new ArrayCollection();
}
...
}
しかし、うまくいきません!私はこのメッセージを得ました:
"The target-entity Album\Entity\Artist cannot be found in 'Album\Entity\Album#artist'."
だから私の質問は:何が間違っているのですか?エンティティが間違った場所にありますか? または私のモジュール構成は大丈夫ではありませんか?複数のモジュールで 1 つのエンティティを表示するにはどうすればよいですか?
アップデート:
エンティティを次のように変更します。
class Album {
/**
* @ORM\Id
* @ORM\Column(type="integer");
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $title;
/**
* @ORM\ManyToOne(targetEntity="\Artist\Entity\Artist", inversedBy="album")
* @ORM\JoinColumn(name="artist_id", referencedColumnName="id")
*/
protected $artist;
...
}
class Artist {
/**
* @ORM\Id
* @ORM\Column(type="integer");
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $name;
/**
* @ORM\OneToMany(targetEntity="\Album\Entity\Album", mappedBy="artist")
*/
protected $album;
...
}
しかし、同じエラーが発生しました:
"The target-entity Artist\Entity\Artist cannot be found in 'Album\Entity\Album#artist'."
更新 2:
アプリケーションの構造を次のように変更しました。
module
Album
src
Album
Controller
AlbumController.php
ArtistController.php
Entity
Album.php
Artist.php
私のエンティティは同じ名前空間にあり、私のプログラムは機能しています! =)
しかし、まだ疑問があります: ZF2 で 1 つのエンティティを複数のモジュールから見えるようにするにはどうすればよいですか?