Doctrine 2.0のlaravel 5.4で簡単なプロジェクトを作成しました。私は3つのテーブルを持っています:ユーザー、ロール、user_roles。 HEIDISQLからテーブルスキーマからのスクリーンショット私は以下を示しています。すべてのユーザーの役割を取得するlarvelのDoctrine
私は3つのエンティティクラスのを持っています各テーブルのコース:
<?php
namespace TodoList\Http\Entities;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="users")
*/
class User
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*
*/
private $id;
/**
*
* @ORM\Column(type="string")
*
*/
private $name;
/**
*
* @ORM\Column(type="string")
*
*/
private $email;
/**
* @ORM\OneToMany(targetEntity="Task", mappedBy="user", cascade={"persist"})
* @var ArrayCollection|Task[]
*/
private $tasks;
/**
* @ORM\OneToMany(targetEntity="UserRole", mappedBy="user")
*/
protected $user_roles;
/**
* User constructor
* @param @name
* @param @email
* @param $password
*/
public function __construct($name, $email) {
$this->name = $name;
$this->email = $email;
$this->tasks = new ArrayCollection();
$this->user_roles = new ArrayCollection();
}
/**
*
* @return mixed
*
*
*/
public function getName()
{
return $this->name;
}
/**
* @return mixed
*/
public function getEmail()
{
return $this->email;
}
/**
* @return mixed
*/
public function getTasks()
{
return $this->tasks;
}
public function addTask(Task $task)
{
if(!$this->tasks->contains($task)) {
$task->setUser($this);
$this->tasks->add($task);
}
}
public function getId(){
return $this->id;
}
public function getUserRoles(){
return $this->user_roles;
}
}
<?php
namespace TodoList\Http\Entities;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="roles")
*
*/
class Role{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string")
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="description", type="text")
*/
private $description;
/**
* @ORM\OneToMany(targetEntity="UserRole", mappedBy="role",cascade={"persist"})
*/
protected $user_roles;
public function getId(){
return $this->id;
}
public function getName(){
return $this->name;
}
public function getDescription(){
return $this->description;
}
}
<?php
namespace TodoList\Http\Entities;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="user_roles")
*/
class UserRole
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
*
* @ORM\ManyToOne(targetEntity="User", inversedBy="user_roles")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*
*/
private $user;
/**
*
* @ORM\ManyToOne(targetEntity="Role", inversedBy="user_roles")
* @ORM\JoinColumn(name="role_id", referencedColumnName="id")
*/
private $role;
public function setUser(User $user)
{
$this->user = $user;
return $this;
}
/**
* Get user
*
* @return \NVC\UserBundle\Entity\User
*/
public function getUser()
{
return $this->user;
}
/**
* Set recipe
*
* @param \NVC\RecipeBundle\Entity\Recipe $recipe
* @return UserRecipeAssociation
*/
public function setRole(Role $role)
{
$this->role = $role;
return $this;
}
/**
* Get recipe
*
* @return \NVC\RecipeBundle\Entity\Recipe
*/
public function getRole()
{
return $this->role;
}
}
doctrine Entity Managarによって特定のユーザーの役割を取得しようとしているときに問題があります。エラーメッセージがある findBy方法から
public function showUserRoles(EntityManagerInterface $em){
$userRoles = $em->getRepository('\TodoList\Http\Entities\UserRole');
$userRoles->findBy(['user' => 2]);
//count($userRole);
}
エラーがあります:
(1/1)FatalErrorException
: 失敗した開口部が '\ xamppの\ htdocsに\プロジェクト\ストレージ\ proxies__CG__TodoListHttpEntitiesRole.php C' を必要と
教義\共通\私はそのようにすることをやろうとしていますプロキシ\ AbstractProxyFactory :: getProxyDefinition(): (のinclude_path = 'C:\ XAMPPの\ PHPの\のPEAR')
私のエンティティに問題はありますか?私はその問題をどうやって解決できるのか分かりません。誰かが私を助けることができますか? 私は 敬具非常にgreatefulだろう;)
教義適切に構成されていません。 –
どのように私はdoctrineのプロパティを設定できますか? –
公式のDoctrineのドキュメントで十分です。特に、プロキシディレクトリは設定されていなければならず、Webサーバープロセスによって書き込み可能でなければなりません –