标签: query-builder

教条2:限制左联/分页 - 最佳实践

我有一个大查询(在我的查询构建器中)和很多左连接.所以我得到他们的评论和标签等文章.假设我有以下dql:

$dql = 'SELECT blogpost, comment, tags 
FROM BlogPost blogpost 
LEFT JOIN blogpost.comments comments
LEFT JOIN blogpost.tags tags';
Run Code Online (Sandbox Code Playgroud)

现在让我们说我的数据库有超过100个博客帖子,但我只想要前10个,但是包含那些10及其所有标签的所有评论,如果它们存在的话.如果我使用setMaxResults它限制行.所以我可能得到前两个帖子,但最后一个帖子缺少一些评论或标签.所以跟随不起作用.

$result = $em->createQuery($dql)->setMaxResults(15)->getResult();
Run Code Online (Sandbox Code Playgroud)

使用doctrine2.2附带的几乎没有文件记录的分页解决方案对我来说并不是真的有效,因为它太慢了,我也可以加载所有数据.

我在Stackoverflow文章中尝试了解决方案,但即使该文章仍然缺少最佳实践,所提出的解决方案也非常慢.

对于如何做到这一点,是否有最佳实践?没有人在生产模式下使用Doctrine2.2吗?

pagination subquery query-builder database-performance doctrine-orm

7
推荐指数
1
解决办法
5761
查看次数

查询参数的Symfony2 Charset

我在Symfony2中有一个项目,它在我的本地主机上运行良好,但在将其移动到外部服务器后问题已经开始.

  1. 我没有看到数据库中包含波兰字符的任何结果名称
  2. 在Profiler中我检查了查询:
    • 'Parameters'部分有正确的字符集
    • 'runnable query'具有相同的参数但具有错误的字符集

例如:

(...) WHERE ((((c1_.name LIKE '%Å?%') OR (c3_.name LIKE '%Å?%') OR (..) Parameters: ['%?%', '%?%', (...)]

所有数据库表都有charset = utf8_unicode_ci.

在config.yml我设置

doctrine: 
    dbal: 
      charset: UTF8 
Run Code Online (Sandbox Code Playgroud)

设置框架charset不起作用.

/config.php测试说:

RECOMMENDATIONS:
  1. Install and enable a PHP accelerator like APC (highly recommended).
  2. Set short_open_tag to off in php.ini*.
  3. Set magic_quotes_gpc to off in php.ini*.
  * Changes to the php.ini file must be done in "/usr/local/php/php.ini".
Run Code Online (Sandbox Code Playgroud)

但不幸的是,我无法访问该服务器上的php.ini.这可能是magic_quotes_gpc导致了这个问题吗?我也无法访问命令行,所以我通过ftp和phpmyadmin添加了项目(数据库,文件系统,供应商).

Becouse我在本地主机上没有问题我猜这是服务器配置的问题,我无法访问它,我看到的唯一方法是尝试更改QueryBuilder的charset配置.我在哪里可以做到的?你知道还有什么可能导致这个问题吗?

谢谢

configuration character-encoding query-builder symfony

7
推荐指数
1
解决办法
4148
查看次数

寻找JQuery查询构建器

我找到了http://redquerybuilder.appspot.com/,但这会生成我希望避免的SQL客户端.在帽子页面上有一个指向JQuery Query Builder插件的链接,但该链接转到jquery主页.看起来这个插件不再存在了(另请参阅JQuery中的简单SQL查询生成器以获得相同的链接).

我找到了http://kindohm.com/posts/2013/09/25/knockout-query-builder/,它看起来非常符合我的要求,除了我不想添加另一个JavaScript库.

最后有http://devtools.korzh.com/easyquery/javascript/docs/javascript-query-builder-php,看起来非常好.但他们使用Web服务生成SQL,您必须获得一个API密钥才能生效.现在它是免费的...但看起来像一个很好的陷阱诱使用户,然后当他们不能轻易逃脱时,可能会开始收取Web服务或可以随时关闭它.

因此,在我构建自定义查询表单之前,是否存在这样的查询构建器?

sql jquery query-builder

7
推荐指数
3
解决办法
2万
查看次数

Laravel查询生成器不在

我有以下sql查询

SELECT * FROM exams WHERE exams.id NOT IN (SELECT examId FROM testresults)
Run Code Online (Sandbox Code Playgroud)

如何将其转换为Laravel查询构建器格式?

谢谢.

mysql query-builder laravel

7
推荐指数
1
解决办法
2万
查看次数

JPA Criteria API:数据库中两个日期之间的差异?

简单问题:我有一个带有两个日期列(从,直到)的(MySQL)表,并询问它

select * from mytable where until > from + interval 4 week;
Run Code Online (Sandbox Code Playgroud)

这在 MySQL 中非常简单。

你怎么能在 JPA Query 中做到这一点

cq.where(cb.and(mytable_.get(until),...)
Run Code Online (Sandbox Code Playgroud)

编辑:两个日期都来自数据库行,我比较了数据库的两个字段,而不是应用程序中的一个字段与数据库中的一个字段。

java jpa query-builder

7
推荐指数
1
解决办法
6757
查看次数

Laravel使用Query Builder进行upsert操作

在我的一个工作脚本中,基于某些指标存储聚合计数,我没有使用Eloquent,因为查询有点复杂,并且使用查询构建器很容易编写.我目前从数据库中获取值,我需要在数据库中插入/更新它.使用Query Builder可以实现upsert操作是否可以使用Query Builder实现?或者我是否每次都需要检查此条目是否在数据库中?

我总共有100,000个条目,并希望将其作为日常工作运行.因此,如果我需要检查数据库中是否存在特定条目,我需要多次访问数据库.有替代解决方案吗?

我正在考虑创建两个模型类,一个使用Eloquent,另一个使用查询构建器.我可以在Eloquent模型中使用我的自定义查询吗?

query-builder laravel eloquent laravel-5 laravel-query-builder

7
推荐指数
2
解决办法
5825
查看次数

从原始查询中获取 Laravel Eloquent Collection

我正在使用 Laravel 5 并且我有一个用户表,以及两个包含用户之间关系的表“客户”和“员工”。

我想获得登录用户的所有客户和员工。

我有一个原始查询,它可以正常工作:

select users.* from clients, users
where clients.id_marchand = 8 and users.id = clients.id_client 
union 
select users.* from employes, users 
where employes.id_marchand = 8 and users.id = employes.id_employe 
order by `seen` asc, `created_at` desc limit 25 offset 0
Run Code Online (Sandbox Code Playgroud)

原始查询返回一个数组,但我需要获得一个 Eloquent 集合,例如:

return $this->model
->where(...)
->oldest('seen')
->latest()
->paginate($n);
Run Code Online (Sandbox Code Playgroud)

我尝试了很多不同的可能性,但它们都不起作用......

有没有办法用子查询或其他方法来做到这一点?

php mysql query-builder eloquent laravel-5

7
推荐指数
2
解决办法
1万
查看次数

Laravel 查询生成器之间

我构建了一个搜索表单,它将从数据库中选择标记,其中日期插入到数据选择器中。这工作正常,但是,当我添加时间时,出现错误。

我将查询重建为类似的内容:

$datefrom = $request->input('datefrom');
$dateto = $request->input('dateto');
$timefrom = $request->input('timefrom');
$timfrom = $timefrom.':00';
$timeto = $request -> input('timeto');
$timto = $timeto.':00';
$type = $request->input('type');

$maps = Map::select('lat','lng',$type,'temp','humidity','date','time')
                ->where(function($query){
                    $query->whereBetween('date',array($datefrom,$dateto))
                    ->whereBetween('time',array($timfrom,$timto));
                })
                ->get();
Run Code Online (Sandbox Code Playgroud)

当我在搜索表单上输入检查时,出现错误:

未定义变量:$datefrom 等。

有什么帮助吗?

php sql database query-builder laravel

7
推荐指数
1
解决办法
3万
查看次数

Laravel喜欢不能正常工作

我想将查询构建器与LIKE运算符一起使用,但它无法正常工作.

这是我的控制器中的代码:

public function listall($query) {
        $Clubs = Club::where('clubs.name', 'like', "%$query%")
                ->Join('leagues', 'clubs.league_id', '=', 'leagues.id')
                ->select('clubs.id', 'clubs.name', 'clubs.blason', 'leagues.name as league_name')
                ->orderBy('clubs.name')
                ->get();

        return Response::json($Clubs);
    }
Run Code Online (Sandbox Code Playgroud)

这是我的Javascript代码:

<script type="text/javascript">
    function hasard(min,max){
        return min+Math.floor(Math.random()*(max-min+1));
    }
    jQuery(document).ready(function($) {
        // Set the Options for "Bloodhound" suggestion engine
        var engine = new Bloodhound({
            remote: {
                url: "{{ url('club/listall') }}"+'/%QUERY%',
                wildcard: '%QUERY%'
            },
            datumTokenizer: Bloodhound.tokenizers.obj.whitespace,
            queryTokenizer: Bloodhound.tokenizers.whitespace
        });

        $(".club-search").typeahead({
            hint: true,
            highlight: true,
            minLength: 1
        }, {
            source: engine.ttAdapter(),
            display: "name",
            // This will be …
Run Code Online (Sandbox Code Playgroud)

javascript mysql query-builder laravel sql-like

7
推荐指数
1
解决办法
724
查看次数

Doctrine 查询生成器使用 join 嵌套 orX 和 andX 条件

我有两个实体UserCalendarEvent。我的用户附属于一家工厂,calendarEvent 可用于了解用户是否被“借用”到他所属工厂的另一家工厂......

我的两个实体是这样的:

用户:

class User extends BaseUser
{

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var string
     * @ORM\Column(name="firstname", type="string", length=255, nullable=true)
     */
    private $firstname;

    /**
     * @var string
     * @ORM\Column(name="lastname", type="string", length=255, nullable=true)
     */
    private $lastname;

    /**
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\CalendarEvent", mappedBy="user")
     */
    private $events;

    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Factory", inversedBy="users")
     * @ORM\JoinColumn(name="factory_id", referencedColumnName="id")
     */
    private $factory;

}
Run Code Online (Sandbox Code Playgroud)

日历事件:

class CalendarEvent
{

    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * …
Run Code Online (Sandbox Code Playgroud)

doctrine join repository query-builder conditional-statements

7
推荐指数
1
解决办法
6936
查看次数