我正在使用 Doctrine QueryBuilder 创建一个查询,以通过电子邮件结尾选择一群用户。我有一系列电子邮件结尾,例如['@someservice.com', '@anotherservice.com' ]
.
我知道我可以通过WHERE IN
以下方式在数组中选择字符串:
$qb= $this
->createQueryBuilder('u')
->orderBy('u.id', 'asc')
->where('u.email IN (:emails)')
->setParameter('emails', [
'@someservice.com',
'@anotherservice.com'
]);
Run Code Online (Sandbox Code Playgroud)
然而,这个查询字符串的确切出现次数,因此查询当然会返回一个空的结果集。
这就是为什么我想在数组上做一个 LIKE 搜索,但做一些事情:
$qb= $this
->createQueryBuilder('u')
->orderBy('u.id', 'asc')
->where('u.email LIKE IN (:emails)')
->setParameter('emails', [
'%@someservice.com',
'%@anotherservice.com'
]);
Run Code Online (Sandbox Code Playgroud)
不幸的是失败了。是否有一些语法糖可以进行这样的查询,还是我必须用一堆orHaving
调用进行查询?
我使用此代码获取数据库中的所有用户
$users= $this->getDoctrine()
->getRepository('AppBundle:Users')
->findAll();
return $this->render('livre/users.html.twig',array(
'users' => $users,
));
Run Code Online (Sandbox Code Playgroud)
但我只想得到一些字段 sush as name
,email
并隐藏像password
..这样的字段。谢谢。
我需要上个月创建的表中的所有数据。我创建了下面的代码,但它在 DQL 中给出了以下错误,但是运行它时 SQL 查询是正确的。
错误 :
[Syntax Error] line 0, col 138: Error: Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got '-'
Run Code Online (Sandbox Code Playgroud)
代码是;
$compCases = $this->getDoctrine()
->getRepository('EFuturesCrmBundle:CasesCompensation')
->createQueryBuilder('c')
->select('c.id')
->where('c.caseStatus =:status')
->andWhere('YEAR(c.caseStatusDate) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)')
->andWhere('MONTH(c.caseStatusDate) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)')
->setParameter('status', 'resolve')
->getQuery()
->getResult();
Run Code Online (Sandbox Code Playgroud)
DQL 不支持INTERVAL
Doctrine2 怎么可能呢?
我在Symfony 2中的项目有问题我得到了这个错误
Catchable Fatal Error: Object of class Nicearma\MemesBundle\Entity\Usuario could not be converted to string in C:\wamp\www\24memes\vendor\doctrine-dbal\lib\Doctrine\DBAL\Statement.php line 131
Run Code Online (Sandbox Code Playgroud)
问题是,我试图做一个表格,从UsuarioInfo类,这个类有一个对象Usuario,表单工作正常,但去发送信息我得到消息而我没有找到解决方案,任何人都知道如何解决这个?我有这个文件
registro.html.twig
<div class="usuario">
{{ form_row(form.usuario) }}
</div>
{{ form_rest(form) }}
Run Code Online (Sandbox Code Playgroud)
Usuario.php
namespace Nicearma\MemesBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Nicearma\MemesBundle\Entity\Usuario
*
* @ORM\Table(name="usuario")
* @ORM\Entity(repositoryClass="Nicearma\MemesBundle\Repository\Usuario")
*/
class Usuario implements UserInterface
{
/**
* @var integer $id
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string $nombre
* @Assert\Type(type="String") …
Run Code Online (Sandbox Code Playgroud) 我在我的symfony 2项目中创建了一个doctrine实体类,现在我想在实体管理器保存之前自动设置一个属性.是否有一些钩子要实现或如何解决我的问题?
我正在使用symfony 2.3.4,在安全配置中,我想根据此Cookbook指令从数据库加载安全用户.但我只得到这个错误:
致命错误:类MyApp\AdminBundle\Entity\Users包含3个抽象方法,因此必须声明为抽象方法或实现其余方法(Symfony\Component\Security\Core\User\UserInterface :: getRoles,Symfony\Component\Security\Core\/Volumes/Htdocs/symfony/src/MyApp/AdminBundle/Entity/Users.php中的User\UserInterface :: getUsername,Symfony\Component\Security\Core\User\UserInterface :: eraseCredentials)
这是在函数"myList中" ProduitRepository:
public function myList($id)
{
$qb = $this->createQueryBuilder('p');
$qb->where('p.id > 10');
return $qb->getQuery()
->getResult();
}
Run Code Online (Sandbox Code Playgroud)
这是ProduitType.php中的builderForm:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('nom', 'text', array('required' => true))
->add('description', 'textarea', array('required' => false))
->add('prix', 'money', array('required' => true))
->add('publication', 'checkbox', array('required' => false))
->add('image', new ImageType() )
->add('sousCategorie', 'entity',array(
'class' => 'StoreCategorieBundle:SousCategorie',
'property' => 'nom',
'multiple' => false,
'expanded' => false ))
->add('produit', 'entity', array(
'class' => 'StoreProduitBundle:Produit',
'property' => 'nom',
'query_builder' => function(\Store\ProduitBundle\Entity\ProduitRepository $er) …
Run Code Online (Sandbox Code Playgroud) 我有这段代码:
$entity = $em->getRepository('AppBundle:Representative')->find($soqlObj1['records'][0]['Id']);
if ($entity === null) {
$entity = new Representative();
$em->persist($entity);
}
// we set the values from veeva
$entity->setVeevaRepId($soqlObj1['records'][0]['Id']);
$entity->setEmail($soqlObj1['records'][0]['Email']);
...
$em->flush();
Run Code Online (Sandbox Code Playgroud)
这是实体的一部分Representative
:
class Representative
{
/**
* @ORM\Id()
* @ORM\Column(type="string", length=45, nullable=false, unique=true)
* @ORM\GeneratedValue()
* @Expose()
*/
protected $veeva_rep_id;
/**
* @var string
* @ORM\Column(type="string", length=45)
* @Expose()
*/
protected $display_name;
/**
* @var string
* @ORM\Column(type="string", length=255)
* @Expose()
*/
protected $avatar_url = 'https://pdone.s3.amazonaws.com/avatar/default_avatar.png';
/**
* @var string
* @ORM\Column(type="string", length=45) …
Run Code Online (Sandbox Code Playgroud) 在Doctrine 2.4之前,捕获生命周期事件(例如prePersist
)的默认方式是为所有实体触发的全局事件侦听器.运行像Symfony服务这样的监听器可以很容易地注入其他服务(如request
或request_stack
对象).
现在,更好的解决方案似乎是一个实体监听器,因为它带来的开销更少!
那么让我们在实体标题中开始这个...:
* @ORM\EntityListeners({ "AppBundle\Entity\Listener\LanguageListener" })
Run Code Online (Sandbox Code Playgroud)
这是班级:
namespace AppBundle\Entity\Listener;
use Doctrine\ORM\Event\LifecycleEventArgs;
class LanguageListener
{
public function prePersist($obj_entity, LifecycleEventArgs $obj_eventArgs)
{
$request = ???;
// set entity to users preferred language (for example 'de')
$obj_entity->setLanguage($request->getLocale());
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我对如何访问Symfonys服务(在这种情况下是request
对象)没有任何想法.
可是等等!有一种方法:
global $kernel;
if ('AppCache' == get_class($kernel))
{
$kernel = $kernel->getKernel();
}
$request = $kernel->getContainer()->get('request');
Run Code Online (Sandbox Code Playgroud)
而且它也在发挥作用.
但在我的所有研究中,我发现很多相关的问题都严格警告了!唯一的区别:所有这些问题都是指实体,而不是实体听众 ......
......引导我到这两个问题:
[编辑:]再次(见第一句)让我说清楚这个问题也是关于如何不使用服务.服务需要一定的费用,请参阅昂贵的服务建设 …
我想做的事情很简单,但是我找不到解决方案。我已经开始使用与Doctrine捆绑在一起的Symfony4开发我的应用程序。最初,我设计了数据库模型,但是在开发过程中,我意识到原始解决方案对于我想做的事情是错误的方式。现在,我想从实体中删除一个属性。在普通的SQL中,我会ALTER TABLE table DROP COLUMN column
然后使用新参数重新创建它。但是,该解决方案在Doctrine中给了我一个错误,因此我也更改了PHP模型。同样,另一个错误。好的,这看起来不像我想要的方式。除了在学说方面深入研究之外,我的问题是否有解决方案?最好的方法就是上面的SQL命令中所述的简单方法?