我如何在数据库cakephp中为一年的日期字段创建一个select选项

时间:2014-03-19 19:44:07

标签: php cakephp

你好我有一个日期字段en mi DB“dateToday”现在我需要选择全年并将它们存储在一个数组中

2013年1月11日

2014年3月12日

2014年5月21日

2013年11月15日

2014年12月19日

2014年3月17日

2015年9月1日

2015-04-24

我的阵列将是(2013年,2014年,2015年)

进入我的代码我探测了一些但没有找到的东西。

模型

SoyaProductorCompra.php

   <?php
/**
* 
*/
class SoyaProductorCompra extends AppModel
{
    public $useTable = 'soyaproductorcompra';
    public $primaryKey = 'id';  
    public $belongsTo = array('User');

    public function getYears()
    {
        return $this->SoyaProductorCompra->find('all', array('fields' => 'DISTINCT YEAR(fecharegistro) as distinct_year'));
    }
}

?>

但在我看来没有找到

SoyasController.php

<?php
/**
* 
*/
class SoyasController extends AppController
{

    public function cano($id = null)
    {
        $this->loadModel('Soya');

        $this->loadModel("SoyaProductorCompra");
        $years = $this->SoyaProductorCompra->getYears();

        if (!$id) {
            $this->Session->setFlash('Porfavor provea un id de usuario');
            $this->redirect(array('action'=>'index'));
        }

        $user = $this->Soya->findById($id);
        if (!$user) {
            $this->Session->setFlash('El id proporcionado no es valido');
            $this->redirect(array('action'=>'index'));
        }
        if (!$this->request->data) {
            $this->request->data = $user;
        }
    }
}

错误:在非对象上调用成员函数find()

文件:SoyaProductorCompra.php

行:返回$ this-&gt; SoyaProductorCompra-&gt; find('all',array('fields'=&gt;'DISTINCT YEAR(fecharegistro)as distinct_year'));

2 个答案:

答案 0 :(得分:0)

通过控制器,您可以从模型中获得与此类似的不同年份:

$years = $this->YourModel->find('all', array(
    'fields' => 'DISTINCT YEAR(yourdatefield) as distinct_year'
));

然后,填充一个数组:

$distinct_years = array();
foreach($years as $year) {
    $distinct_years[] = $year[0]['distinct_year'];
}

...并将其设置为在您的视图中可用:

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

然后在你看来:

print_r($distinct_years);

答案 1 :(得分:0)

您不必在自己内部调用模型,因为它存储在this变量中。所以:

public function getYears()
{
    return $this->find('all', array('fields' => 'DISTINCT YEAR(fecharegistro) as distinct_year'));
}