我将为您翻译关于IT技术的内容,涉及Zend Framework 2。我从Ron Allen的教程http://akrabat.com/getting-started-with-zend-framework-2/开始学习,然后使用http://www.jasongrimes.org/2012/01/using-doctrine-2-in-zend-framework-2/的教程集成了Doctrine 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'."
所以我的问题是:出了什么问题?我的实体放错位置了吗?还是我的模块组织不正确?如何让一个实体在多个模块中可见?
更新:
我把我的实体改成了:
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中,我如何使一个实体对于多个模块可见?
album module
(只有selectOne和selectAll)和一个admin module
(有selectOne、selectAll、insert、update和delete),你会如何组织你的实体?这就是我的问题...但非常感谢@Cerad的帮助! - Vinicius Garcia