Php hata ayıklama fonksiyonu ile sorun

2 Cevap php

I am relatively new to Cake PHP framework and was trying few things in it. I have made a blog databse. I was trying to view an array of number of posts made in a particular year using the debug() function. I wrote the following function in the post model.

function findByYear($year = null){
    	$date = $year.'-01-01 00:00:00';
    	$end_date = $year.'-12-31 23:59:59';
    	return $this->find('all',array('conditions'=>array('DATE(Post.date)'=>'>'.$date,'DATE(Post.date)'=>'<'.$end_date)));

    }

Sonra posts_controller bir okuma fonksiyonu dahil.

function read($year=null) {
    	 if (!$year) {
    		$this->Session->setFlash('Please supply a year');
    	    $this->redirect(array('action'=>'index'));
        }
    	$this->set('posts',$this->Post->findByYear($year));
    }

Son olarak, bir okuma görünüm dosyası (read.ctp) oluşturulur ve bu hata ayıklama fonksiyonu dahil

<?php debug($posts) ?>

Now, the problem is that I am getting an empty array when I launch the action in the URL: http://localhost/posts/read/2009 I already have 3 posts but I am not getting any of them in the array. What am I missing?

2 Cevap

Koşulları array (o dizeleri gibi diziler içerebilir demek ki) karışık tipte olabilir. Yerine tarihte tam bir eşleşme bir dizi ile çalışıyoruz çünkü, dizeleri gibi tarih tabanlı kriterleri ifade etmek daha kolay olabilir. Örneğin:

$conditions   = array();
$conditions[] = array('Post.id'=>$myId);
$conditions[] = 'DATE(Post.date) > '.$date;

$posts        = $this->find('all',array('conditions'=>$conditions));

(Bir yan yarar bu ayrıştırmak ölümlüler için çok daha kolay olduğunu olmak.)

Başka bir nokta - Eğer tarih dizeleri oluşturmak için mktime() fonksiyonunu kullanarak yerine sadece dize önüne parametreyi birleştirerek ve en iyi için umut düşünmelisiniz. Bu $year parametresinin bazı temel doğrulama sağlayarak yanı sıra beklenmeyen sonuç alma olasılığını azaltma ikili bir amaca hizmet edecektir. Örneğin:

$date     = mktime(0,0,0,1,1,$year); //$year.'-01-01 00:00:00';
$end_date = mktime(23,59,59,12,31,$year); //$year.'-12-31 23:59:59';

Yani hemen hemen her açıdan bir kazan yani yine de istediğini, hangi unix zaman formatında tarih değerleri hem koyacaktır.

İyi şanslar!

Ben sorunu "<" bir yer olduğunu düşünüyorum ve ">" operatörler, "anahtar" tarafta olmak zorunda, çünkü, değil "değer" tarafında. Değişim

'DATE(Post.date)' => '>'.$date

karşı

'DATE(Post.date) >' => $date

Aynı şey diğer durum için de geçerlidir.