我想用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
变量