String Symfony2:Can';t在搜索表单中指定字符串
我正在尝试做一个搜索表单,根据客户公司名称查找项目 我的客户实体String Symfony2:Can';t在搜索表单中指定字符串,string,forms,symfony,search,String,Forms,Symfony,Search,我正在尝试做一个搜索表单,根据客户公司名称查找项目 我的客户实体 <?php namespace ProjectBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Intl\Intl; /** * Client * * @ORM\Table() * @ORM\Entity(repositoryClass="ProjectBundle\Entity\CustomerRepository")
<?php
namespace ProjectBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Intl\Intl;
/**
* Client
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="ProjectBundle\Entity\CustomerRepository")
*/
class Customer {
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="company_name", type="string", length=255)
*/
private $companyName;
/**
* @var string
*
* @ORM\Column(name="contact_name", type="string", length=127)
*/
private $contactName;
/**
* @var string
*
* @ORM\Column(name="contact_function", type="string", length=127)
*/
private $contactFunction;
/**
* @var string
*
* @ORM\Column(name="contact_phone", type="string", length=64)
*/
private $contactPhone;
/**
* @var string
*
* @ORM\Column(name="contact_mobile_phone", type="string", length=64)
*/
private $contactMobilePhone;
/**
* @var string
*
* @ORM\Column(name="town", type="string", length=255)
*/
private $town;
/**
* @var string
*
* @ORM\Column(name="country", type="string", length=2)
*/
private $country;
/**
* @var boolean
*
* @ORM\Column(name="actif", type="boolean")
*/
private $actif;
/**
* @var \DateTime
*
* @ORM\Column(name="created_at", type="datetime")
*/
private $createdAt;
/**
* @var \DateTime
*
* @ORM\Column(name="updated_at", type="datetime")
*/
private $updatedAt;
public function __construct() {
// Par défaut, la date de l'annonce est la date d'aujourd'hui
$this->createdAt = new \Datetime();
$this->actif = true;
}
/**
* Get id
*
* @return integer
*/
public function getId() {
return $this->id;
}
/**
* Set companyName
*
* @param string $companyName
*
* @return Client
*/
public function setCompanyName($companyName) {
$this->updatedAt = new \DateTime();
$this->companyName = $companyName;
return $this;
}
/**
* Get companyName
*
* @return string
*/
public function getCompanyName() {
return $this->companyName;
}
/**
* Set contactName
*
* @param string $contactName
*
* @return Client
*/
public function setContactName($contactName) {
$this->contactName = $contactName;
return $this;
}
/**
* Get contactName
*
* @return string
*/
public function getContactName() {
return $this->contactName;
}
/**
* Set contactPhone
*
* @param string $contactPhone
*
* @return Client
*/
public function setContactPhone($contactPhone) {
$this->contactPhone = $contactPhone;
return $this;
}
/**
* Get contactPhone
*
* @return string
*/
public function getContactPhone() {
return $this->contactPhone;
}
/**
* Set contactMobilePhone
*
* @param string $contactMobilePhone
*
* @return Client
*/
public function setContactMobilePhone($contactMobilePhone) {
$this->contactMobilePhone = $contactMobilePhone;
return $this;
}
/**
* Get contactMobilePhone
*
* @return string
*/
public function getContactMobilePhone() {
return $this->contactMobilePhone;
}
/**
* Set contactFunction
*
* @param string $contactFunction
*
* @return Client
*/
public function setContactFunction($contactFunction) {
$this->contactFunction = $contactFunction;
return $this;
}
/**
* Get contactFunction
*
* @return string
*/
public function getContactFunction() {
return $this->contactFunction;
}
/**
* Set town
*
* @param string $town
*
* @return Client
*/
public function setTown($town) {
$this->town = $town;
return $this;
}
/**
* Get town
*
* @return string
*/
public function getTown() {
return $this->town;
}
/**
* Set country
*
* @param string $country
*
* @return Client
*/
public function setCountry($country) {
$this->country = $country;
return $this;
}
/**
* Get country
*
* @return string
*/
public function getCountry() {
return $this->country;
}
/**
* Set actif
*
* @param boolean $actif
*
* @return Client
*/
public function setActif($actif) {
$this->actif = $actif;
}
/**
* Get actif
*
* @return boolean
*/
public function getActif() {
return $this->actif;
}
/**
* Set createdAt
*
* @param \DateTime $createdAt
*
* @return Client
*/
public function setCreatedAt($createdAt) {
$this->createdAt = $createdAt;
return $this;
}
/**
* Get createdAt
*
* @return \DateTime
*/
public function getCreatedAt() {
return $this->createdAt;
}
/**
* Set updatedAt
*
* @param \DateTime $updatedAt
*
* @return Client
*/
public function setUpdatedAt($updatedAt) {
$this->updatedAt = $updatedAt;
return $this;
}
/**
* Get updatedAt
*
* @return \DateTime
*/
public function getUpdatedAt() {
return $this->updatedAt;
}
public function getCountryName() {
return Intl::getRegionBundle()->getCountryName($this->getCountry());
}
public function __toString() {
return $this->getCompanyName();
}
}
项目回购协议摘录:
public function findProjectByParameters($data) {
$query = $this->createQueryBuilder('p');
if ($data['companyName']) {
$query->innerJoin("p.customer", "c", "WITH", 'c.companyName LIKE :companyName')
->setParameter('companyName', '%' . $data['companyName'] . '%');
}
if ($data['state']) {
$query->andWhere('p.state LIKE :state')
->setParameter('state', $data['state']);
}
$query->orderBy('p.name', 'ASC');
return $query->getQuery()->getResult();
}
当我启动搜索Iget时,出现以下错误:
属性“companyName”或方法“getCompanyName()”、“companyName()”、“isCompanyName()”、“hasCompanyName()”、“\uu get()”都不存在,并且在类“ProjectBundle\Entity\Project”中都没有公共访问权
我不明白为什么会引用到项目实体
我想得到一个字符串,并在连接中客户实体的compagyname中查找它
我不知道如何传递一个不被认为是项目属性的论点…乍一看,我会说。。。删除此方法,它可能会起作用
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'data_class' => 'ProjectBundle\Entity\Project'
));
}
您告诉表单类型它表示一个项目
实体。如用于创建/编辑项目。这不是你想要的。您希望表单独立于实体运行,然后使用表单输入来过滤结果集
如果要设置其他选项,当然需要使用
setDefaultOptions
方法。因此,我会说,第一眼看到的话,至少要删除'data\u class'=>'ProjectBundle\Entity\Project'
。。。删除此方法,它可能会起作用
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'data_class' => 'ProjectBundle\Entity\Project'
));
}
您告诉表单类型它表示一个项目
实体。如用于创建/编辑项目。这不是你想要的。您希望表单独立于实体运行,然后使用表单输入来过滤结果集
如果要设置其他选项,当然需要使用
setDefaultOptions
方法。因此,至少要删除'data\u class'=>'ProjectBundle\Entity\Project'
,因为表单类在绑定到不包含此类getter/setter的“Project”数据类时有一个名为“companyName”的字段,所以会引发该错误
如果需要添加未写入表单绑定到的对象类的字段,可以将“映射”选项设置为false:
->add('companyName', TextType::class, array('mapped' => false, 'required' => false))
或者,如果您的表单根本不需要数据类,您可以简单地从表单的默认选项中删除data\u class属性。由于表单类在绑定到不包含此类getter/setter的“Project”数据类时有一个名为“companyName”的字段,因此会引发该错误 如果需要添加未写入表单绑定到的对象类的字段,可以将“映射”选项设置为false:
->add('companyName', TextType::class, array('mapped' => false, 'required' => false))
或者,如果您的表单根本不需要数据类,您可以简单地从表单的默认选项中删除data\u class属性。我选择了第二个选项,它就工作了。谢谢。很高兴我能帮上忙!也许认为正确答案是正确的。我选择了第二个选项,它成功了。谢谢。很高兴我能帮上忙!也许认为正确答案是正确的。
->add('companyName', TextType::class, array('mapped' => false, 'required' => false))