Symfony 2条令一对多关系映射难倒
我收到一个错误'error:调用未定义的方法Login\LogBundle\Entity\User::getToken()' 当尝试从另一个实体apiuserdetails获取数据时。用户id是apiuserdetails中的外键。我一直在遵循示例关系映射模型。我能够使用getRepository(“LoginLogBundle:UserApiProfile”)从用户实体获取信息,但是如果按照他们描述的相反方式进行,我会得到错误。我的映射有问题,但看不到。谢谢你的帮助 控制器代码为Symfony 2条令一对多关系映射难倒,symfony,doctrine,Symfony,Doctrine,我收到一个错误'error:调用未定义的方法Login\LogBundle\Entity\User::getToken()' 当尝试从另一个实体apiuserdetails获取数据时。用户id是apiuserdetails中的外键。我一直在遵循示例关系映射模型。我能够使用getRepository(“LoginLogBundle:UserApiProfile”)从用户实体获取信息,但是如果按照他们描述的相反方式进行,我会得到错误。我的映射有问题,但看不到。谢谢你的帮助 控制器代码为 n
namespace Login\LogBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Login\LogBundle\Entity\User;
use Login\LogBundle\Entity\UserApiDetails;
use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Constraints as Assert;
class DefaultController extends Controller
{
public function userprofileAction(Request $request) {
if ($request->getMethod()=='POST') {
$name=$request->get('name');
$em = $this->getDoctrine()->getManager();
$repository = $em->getRepository("LoginLogBundle:User");
$user = $repository->findOneBy(array('username'=>$name));
return $this->render('LoginLogBundle:Default:userprofile.html.twig',array('token' => $user->getToken()));
}
}
else {
return $this->render('LoginLogBundle:Default:userprofile.html.twig');
}
}
}
实体-用户
namespace Login\LogBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity(repositoryClass="Login\LogBundle\Entity\Repository\UserRepository")
* @ORM\Table(name="user")
* @ORM\HasLifecycleCallbacks()
*
* User
*/
class User{
/**
* @var string
*/
private $password;
/**
* @var string
*/
private $name;
/**
* @var string
*/
private $username;
/**
* @var integer
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="UserApiDetails", mappedBy="User")
*/
protected $userapidetails;
public function __construct()
{
$this->userapidetails = new ArrayCollection();
}
/**
* Set password
*
* @param string $password
* @return User
*/
public function setPassword($password)
{
$this->password = $password;
return $this;
}
/**
* Get password
*
* @return string
*/
public function getPassword()
{
return $this->password;
}
/**
* Set name
*
* @param string $name
* @return User
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set username
*
* @param string $username
* @return User
*/
public function setUsername($username)
{
$this->username = $username;
return $this;
}
/**
* Get username
*
* @return string
*/
public function getUsername()
{
return $this->username;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
}
实体-ApiUserDetails
namespace Login\LogBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="Login\LogBundle\Entity\Repository \UserApiDetailsRepository")
* @ORM\Table(name="user_api_details")
* @ORM\HasLifecycleCallbacks()
*
* UserApiDetails
*/
class UserApiDetails{
/**
* @var string
*/
private $apiScheme;
/**
* @var string
*/
private $apiUrl;
/**
* @var string
*/
private $token;
/**
* @var string
*/
private $tokenSecret;
/**
* @var integer
*/
private $apiId;
/**
* @var \Login\LogBundle\Entity\User
*
* @ORM\ManyToOne(targetEntity="User",inversedBy="userapidetails")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
protected $user;
/**
* Set apiScheme
*
* @param string $apiScheme
* @return UserApiDetails
*/
public function setApiScheme($apiScheme)
{
$this->apiScheme = $apiScheme;
return $this;
}
/**
* Get apiScheme
*
* @return string
*/
public function getApiScheme()
{
return $this->apiScheme;
}
/**
* Set apiUrl
*
* @param string $apiUrl
* @return UserApiDetails
*/
public function setApiUrl($apiUrl)
{
$this->apiUrl = $apiUrl;
return $this;
}
/**
* Get apiUrl
*
* @return string
*/
public function getApiUrl()
{
return $this->apiUrl;
}
/**
* Set token
*
* @param string $token
* @return UserApiDetails
*/
public function setToken($token)
{
$this->token = $token;
return $this;
}
/**
* Get token
*
* @return string
*/
public function getToken()
{
return $this->token;
}
/**
* Set tokenSecret
*
* @param string $tokenSecret
* @return UserApiDetails
*/
public function setTokenSecret($tokenSecret)
{
$this->tokenSecret = $tokenSecret;
return $this;
}
/**
* Get tokenSecret
*
* @return string
*/
public function getTokenSecret()
{
return $this->tokenSecret;
}
/**
* Get apiId
*
* @return integer
*/
public function getApiId()
{
return $this->apiId;
}
/**
* Set user
*
* @param \Login\LogBundle\Entity\User $user
* @return UserApiDetails
*/
public function setUser(\Login\LogBundle\Entity\User $user = null)
{
$this->user = $user;
return $this;
}
/**
* Get user
*
* @return \Login\LogBundle\Entity\User
*/
public function getUser()
{
return $this->user;
}
}
如果您获得了
\Login\LogBundle\Entity\User
,则没有setToken
,并在错误消息中声明。而且,由于您没有指向\Login\LogBundle\Entity\UserApiDetails
的导航属性,因此,如果您朝这个方向走,实际上您会被卡住。您可以从用户
中获得导航属性,以获取(单个或列表)UserApiDetails
,或者输入UserApiDetails
并使用导航属性获取用户
信息。在最后一种情况下,您可以简单地在小树枝中使用{{userapi.user.token}
我认为您提到的导航属性如下所示,或者您能给我正确的代码吗请/***@ORM\OneToMany(targetEntity=“UserApiDetails”,mappedBy=“user”)*/protected$UserApiDetails;公共函数uu construct(){$this->userapidetails=new ArrayCollection();}@saamorimIf必须显式实现userapidetails的访问器,如getUserapidetails()
和setUserapidetails(userapidetails$userapidetails)
,以便在api中使用导航。无论如何,请记住,您将获得一个userapidetails数组,因此在细枝中要小心,因为{{user.userapidetails}}
将返回一个数组。感谢我们进展缓慢,我不知道如何在细枝中渲染此数组,我在控制器return$this->render中执行此操作('LoginLogBundle:Default:userprofile.html.twig',array('details'=>$user->getUserapidetails());然后在细枝中{%for find-in-details%}{{find.token}{%endfor%}什么也得不到@saamorimDo a{{dump(details)}}看细枝返回什么,然后从那里开始。