0

我是一个没有太多编码经验的 cakephp 初学者。我正在尝试有条件地在 '$this->paginate()' 函数上分配空数组,但它不起作用。以下是我在 LogsController 中的部分代码:

if ($privacyVisible['Title']['privacy'] == 1) {
            $this->Log->recursive = 0;
            $this->paginate = array(
                'limit' => 10,
                'order' => array(
                'Log.id' => 'desc'
                ), 'conditions' => array('Title.slug' => $id));

                $this->set('logs',$this->paginate());
        } else {
            $this->Log->recursive = 0;
            $this->paginate = array(
                'limit' => 10,
                'order' => array(
                'Log.id' => 'desc'
                ), 'conditions' => array('1' => '2'));

                $this->set('logs',$this->paginate()); //here it should be empty
        }

但在我看来,在做 debug($logs); 之后 在应用 else 条件时,即隐私 = 零,我将返回所有值,如下所示:

app\View\Logs\index.ctp(第 10 行)

Array
(
[0] => Array
    (
        [Log] => Array
            (
                [id] => 114
                [title_id] => 16
                [body] => hi!
                [time] => 2011-11-15 21:19:10
            )

        [Title] => Array
            (
                [id] => 
                [user_id] => 
                [logname] => 
                [slug] => 
                [privacy] => 
            )

    )

[1] => Array
    (
        [Log] => Array
            (
                [id] => 113
                [title_id] => 14
                [body] => hey!
                [time] => 2011-11-15 20:52:52
            )

        [Title] => Array
            (
                [id] => 14
                [user_id] => 7
                [logname] => college
                [slug] => college
                [privacy] => 1
            )

    )

[2] => Array
    (
        [Log] => Array
            (
                [id] => 112
                [title_id] => 12
                [body] => hey hi.
                [time] => 2011-11-15 20:51:19
            )

        [Title] => Array
            (
                [id] => 
                [user_id] => 
                [logname] => 
                [slug] => 
                [privacy] => 
            )

    )

[3] => Array
    (
        [Log] => Array
            (
                [id] => 111
                [title_id] => 12
                [body] => that will be great.
                [time] => 2011-11-15 20:51:13
            )

        [Title] => Array
            (
                [id] => 
                [user_id] => 
                [logname] => 
                [slug] => 
                [privacy] => 
            )

    )

)

如果它是一个空数组,我愿意在 if(empty($logs)) 上对其进行测试并显示“不允许您”。但目前似乎很难。任何猜测,这里有什么问题?

4

2 回答 2

1

$this->set('logs',$this->paginate())

应该:

$this->set('logs',$this->paginate('Log'));

或者,您可以将其重写为:

$logs = array();

if ($privacyVisible['Title']['privacy'] == 1) {

  $this->paginate = array(...);
  $logs = $this->paginate('Log');

}

$this->set(compact('logs'));

这样,您只在真正想要取回数据时才执行数据库查询。

于 2011-11-16T10:14:42.520 回答
1

我不完全理解你在这里想要完成什么,我觉得这可以用另一种更优雅的方式来完成。您是否考虑过使用Containable行为?Containable 通常用于过滤掉不需要的结果,包括相关内容。

不过,要尝试回答您的问题,为什么在使用时不传递一个空数组$this->set();

调用$this->paginate()执行必要的查找操作以显示数据。您可以在 if/else 语句的第二部分传递一个空数组作为日志变量,如下所示:

$this->set('logs',array());

可能会在空数组上PaginationHelper中断,但我不确定,因此您可能需要检查相关视图中的空值。

于 2011-11-16T10:17:03.370 回答