SYMFONY 4:数据表搜索过滤器问题



我想用Symfony 4制作票务管理系统,所以我使用映射/票务捆绑包。

此捆绑包用于查看和搜索门票,Datatables.net的表。我坚持在票证搜索过滤器上的学说。

我希望能够搜索此表格以获取票证作者的客户名称

用户态度:

/**
 * @ORMEntity(repositoryClass="AppRepositoryUserRepository")
 * @ORMTable(name="app_user")
 */
class User implements UserInterface
{
    /**
     * @ORMColumn(type="string", length=180, unique=true)
     * @AssertPersoEmail
     */
    private $email;
    /**
     * @var string
     *
     * @ORMColumn(name="username", type="string", length=255, nullable=false)
     */
    private $username;
    /**
     * @ORMManyToOne(targetEntity="AppEntityFormation")
     * @ORMJoinColumn(nullable=false)
     */
    private $formation;

形成率:

/**
 * @ORMEntity(repositoryClass="AppRepositoryFormationRepository")
 */
class Formation
{
    /**
     * @ORMColumn(type="array", nullable=true)
     */
    private $formations = [];
    /**
     * @ORMColumn(type="string", length=180, unique=true)
     */
    private $customerName;

我希望能够在搜索表中执行列" customername"

我被困在捆绑包的" ticketrepository"文件中。

ticket repository:

/** @var array $joins */
private $joins;
/**
 * @param string|null $globalSearch
 * @param array $columns
 * @param array $fields
 * @param array $sortOrder
 * @param int $offset
 * @param int $limit
 * @param bool $isCount
 * @param string $status
 * @param string $type
 * @param UserInterface|null $user
 * @return array|int
 * @throws DoctrineORMNonUniqueResultException
 */
public function searchDataTable(string $globalSearch = null, array $columns, array $fields, array $sortOrder, int $offset,
                                int $limit, bool $isCount, $status, $type, UserInterface $user = null)
{
    $this->joins = ['q.status' => 'status'];
    $parameters = ['_status' => $status];
    $qb = $this->createQueryBuilder('q')
        ->where('status.name = :_status');
    $sort = key($sortOrder);
    $order = $sortOrder[$sort];
    $qb->orderBy($this->getX($sort), $order);
    if ($type === 'perso') {
        $qb->andWhere('q.author = :_author');
        $parameters['_author'] = $user;
    }
    if ($type === 'list_public') {
        $qb->andWhere($qb->expr()->orX('q.author = :_author', 'q.public = :_public'));
        $parameters['_author'] = $user;
        $parameters['_public'] = true;
    }
    if (null !== $globalSearch) {
        $qbWhere = [];
        $parameters['globalSearch'] = '%' . $globalSearch . '%';
        foreach ($fields as $field) {
            $qbWhere[] = $qb->expr()->like($this->getX($field), ':globalSearch');
        }
        $qb->andWhere(call_user_func_array([$qb->expr(), 'orX'], $qbWhere));
    } elseif (!empty($columns)) {
        $qbWhere = [];
        foreach ($columns as $field => $value) {
            $qbWhere[] = $qb->expr()->like($this->getX($field), ':' . $field);
            $parameters[$field] = '%' . $value . '%';
        }
        $qb->andWhere(call_user_func_array([$qb->expr(), 'andX'], $qbWhere));
    }
    foreach ($this->joins as $join => $alias) {
        $qb->leftJoin($join, $alias);
    }
    $qb->setParameters($parameters);
    if ($isCount) {
        return $qb->select('COUNT(q.id)')->getQuery()->getSingleScalarResult();
    }
    dump($qb);
    return $qb->setFirstResult($offset)->setMaxResults($limit)->getQuery()->getResult();
}
/**
 * @param string $field
 * @return string
 */
private function getX(string $field)
{
    if ($field === 'author') {
        $this->joins['q.author'] = 'author';
        return 'author.username';
    } elseif ($field === 'customername') {
        $this->joins['q.author'] = 'author';
        return 'author.formation';
    } elseif ($field === 'category') {
        $this->joins['q.category'] = 'category';
        return 'category.name';
    } elseif ($field === 'status') {
        $this->joins['q.status'] = 'status';
        return 'status.value';
    } elseif ($field === 'priority') {
        $this->joins['q.priority'] = 'priority';
        return 'priority.value';
    } elseif ($field === 'assignated') {
        $this->joins['q.assignated'] = 'assignated';
        return 'assignated.username';
    }
    return 'q.' . Inflector::camelize($field);
}

当我在自定义字段中搜索时,我会得到:

[Semantical Error] line 0, col 126 near 'formation LIKE': Error: Invalid PathExpression. Must be a StateFieldPathExpression.

有人可以帮我吗?我对学说不太了解,这对我来说是很新的

看来查询不正确,在完整的堆栈跟踪中,您应该找到完整的查询,下一步尝试在数据库中运行,请在IDE中检查能够进行SQL验证的IDE

要查看查询,请在:

中连接您的断点

DoctrineDBALConnection::executeQuery

您的查询应在$query变量

最新更新