银条查询不工作,最好的方式调试



我有这个silverstripe查询不工作(它输出所有消息,而不是具有日期范围的消息)

处理这个查询的最好方法是什么?我对silverstripe相当陌生,还没有找到关于如何打印原始查询的信息。

return = Message::get()
            ->filter(array(
                'IsPublished' => true,
                'StartPublication:LessThanOrEqual' => date('Y-m-d'),
                'Priority' => array('High', 'Normal')
            ))
            ->where(""StopPublication" >= ".date('Y-m-d')." OR "StopPublication" IS NULL")
            ->sort('StartPublication', 'DESC')->limit($this->getLimit());

正确的答案是不要使用where() -这是一个陷阱方法,许多学习者落入(可能是因为名称)。它基本上只用于ORM无法处理的非常复杂的事情。

你至少调用了filter,这是正确的。但是你想要的不是where()而是filterAny():

Message::get()
    ->filter([
        'IsPublished' => true,
        'StartPublication:LessThanOrEqual' => 'now',
        'Priority' => ['High', 'Normal']
    ])
    ->filterAny([
        'StopPublication:GreaterThanOrEqual' => 'now',
        'StopPublication' => null
    ])
    ->sort('StartPublication', 'DESC')
    ->limit($this->getLimit());

正如另一个答案已经指定的那样,不要在返回上使用=(或在返回前放置$以使其成为变量),并且要返回查询本身,使用$datalist->sql() http://api.silverstripe.org/3.1/class-DataList.html#_sql

但是-看到SQLQuery上的文档是错误的,因为你没有使用SQLQuery。您使用的是ORM,所以这个文档页面更相关:http://docs.silverstripe.org/en/3.1/developer_guides/model/data_model_and_orm/#filterany

For starts return = Message::get() its just return Message::get()

我假设你已经设置了php错误报告,所以它输出错误,SS也在开发模式,所以它不会隐藏错误输出。

你的问题的答案是:

将其输出到输出html:

Debug::dump(Message::get()
            ->filter(array(
                'IsPublished' => true,
                'StartPublication:LessThanOrEqual' => date('Y-m-d'),
                'Priority' => array('High', 'Normal')
            ))
            ->where(""StopPublication" >= ".date('Y-m-d')." OR "StopPublication" IS NULL")
            ->sort('StartPublication', 'DESC')->limit($this->getLimit())->sql());

或者输出到项目根日志文件

Debug::log(Message::get()
            ->filter(array(
                'IsPublished' => true,
                'StartPublication:LessThanOrEqual' => date('Y-m-d'),
                'Priority' => array('High', 'Normal')
            ))
            ->where(""StopPublication" >= ".date('Y-m-d')." OR "StopPublication" IS NULL")
            ->sort('StartPublication', 'DESC')->limit($this->getLimit())->sql());

参见http://docs.silverstripe.org/en/developer_guides/model/sql_query/

相关内容

  • 没有找到相关文章

最新更新