Я пытаюсь понять Zend Framework 2. Для этого я начал с учебник Рона Аллена http://akrabat.com/getting-started-with-zend-framework-2/ тогда, я интегрировать доктрину 2, используя учебник http://www.jasongrimes.org/2012/01/using-doctrine-2-in-zend-framework-2/ ОК, до того, что я решаю чтобы сделать его более сложным.Zend Framework, 2 модели с доктриной 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();
}
...
}
Но это Безразлично» работа! Я получил этот mensage:
"The target-entity Album\Entity\Artist cannot be found in 'Album\Entity\Album#artist'."
Так что мой вопрос: Что не так? Мои сущности находятся не в том месте? или моя организация модуля не в порядке? Как я могу сделать один объект видимым для нескольких модулей?
UPDATE:
изменить мои объекты в:
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'."
UPDATE 2:
Я изменилструктура моей заявки:
module
Album
src
Album
Controller
AlbumController.php
ArtistController.php
Entity
Album.php
Artist.php
поэтому мои сущности находятся в одном пространстве имен, а теперь моя программа работает! =)
Но у меня все еще есть вопрос: как я могу сделать одно сущность видимым для более чем одного мудула в ZF2?
Рад видеть, что вы работали. Doctrine 2 действительно любит объекты, находящиеся в одном каталоге. У Symfony 2 есть некоторый код оболочки, чтобы разрешить несколько каталогов, но я никогда не просматривал детали. Вы можете быть по-своему, по крайней мере, до тех пор, пока ZF2 не будет выпущен, и больше людей начнут его использовать. – Cerad
да, я думаю, это только вопрос ZF2 ... но у меня нет ответа на мои вопросы ... см., Если у вас есть модуль альбома (только с selectOne и selectAll) и 'admin module' (с selectOne , selectAll, вставить, обновить и удалить), как вы организуете свои сущности? вот мой вопрос ... но большое спасибо за вашу помощь @Cerad! – vinigarcia87