cakephp field()查询错误

时间:2014-02-24 07:30:08

标签: mysql sql cakephp-1.3 limit

我正在尝试提取名为id

的表格的最新gal_providers
//get the id of the last gal_provider add.
$order = array("GalProvider.id DESC");
$gal_provider_id = $this->GalProvider->field("id",array("order"=>$order));
$this->data["User"]["username"] = "gal_provider_".$gal_provider_id;

但它显示的错误如下:

  

警告(512):SQL错误:1064:您的SQL语法中有错误;   检查与您的MySQL服务器版本对应的手册   在'order =('GalProvider.id DESC')LIMIT 1'附近使用正确的语法   第1行[CORE / cake / libs / model / datasources / dbo_source.php,第684行]

     

查询:SELECT GalProviderid FROM gal_providers AS GalProvider   WHERE order =('GalProvider.id DESC')LIMIT 1

代码有什么问题?

2 个答案:

答案 0 :(得分:0)

尝试改变这个:

$order = array("GalProvider.id DESC");

到此:

$order = array('GalProvider.id' => 'desc');

或试试这个:

$gal_provider_id = $this->GalProvider->field("id",array('order' => array('GalProvider.id' => 'desc')));

答案 1 :(得分:0)

CakePHP documentation所述,Model :: field()方法的第二个参数用于条件,第三个用于订单。

同时查看文档,我们可以看到默认情况下条件和顺序参数为null - 这意味着我们也可以这样做。

试试这个:

$gal_provider_id = $this->GalProvider->field("id", null, "id DESC");
$this->data["User"]["username"] = "gal_provider_".$gal_provider_id;

在您的示例中,您使用的是Model :: field()方法,就好像它是Model :: find()方法一样(它们是两种不同的方法,并且需要不同的参数格式)

或者,我们可以使用find方法本身:

$gal_provider = $this->GalProvider->find('first', array(
    'fields' => array('GalProvider.id'),
    'order' => 'GalProvider.id DESC',
    'recursive' => -1 // more efficient (ensures no joins made for the query)
));
$this->data["User"]["username"] = "gal_provider_".$gal_provider['GalProvider']['id'];