【问题标题】:Assign empty array to $this->paginate() in cakephp conditionally有条件地将空数组分配给 cakephp 中的 $this->paginate()
【发布时间】:2011-12-30 06:21:12
【问题描述】:

我是一个 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
        }

但在我看来,在进行调试之后($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)) 上对其进行测试并显示“不允许您”。但目前似乎很难。猜猜看,这里出了什么问题?

【问题讨论】:

  • 您能告诉我们您的协会是如何建立的吗? Title 和 Logs(hasOne、hasMany 等)是什么关系?
  • 用户拥有多个标题。标题 hasMany Logs.. 这是否澄清了您的问题?
  • 我怀疑这是正确的 'conditions' => array('1' => '2')?
  • 是的,这是错误的条件,我故意让它与数据库中的任何内容都不匹配,因此不应在 paginate() 中分配任何内容。这是错误的做法吗?

标签: arrays cakephp cakephp-2.0 pagination


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    $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'));
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多