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))