使用 Cakephp Restful WS,主键与默认'id'不同



我想在cakepp中创建一个Web服务,但主键不是id_supp,而是采用默认值id

这是模态:

<?php
App::uses('AppModel', 'Model');
class Supplier extends AppModel {
    var $primaryKey = 'id_supp';

这是的路线

Router::mapResources(array('suppliers'));

这就是视图动作

public function view($id) {
        $supplier = $this->Supplier->findById($id);
        $this->set(array(
            'supplier' => $supplier,
            '_serialize' => array('supplier')
        ));
    }

通过GET 访问以下url时的结果

/suppliers/54f4dc83-0bd0-4fdd-ab8b-0a08ba3b5702.json

是:

{
"code": 500,
"url": "/TN/Back_rest/suppliers/54f4dc83-0bd0-4fdd-ab8b-0a08ba3b5702.json",
"name": "SQLSTATE[42S22]: Column not found: 1054 Unknown column &#039;Supplier.id&#039; in &#039;where clause&#039;",
"error": {
    "errorInfo": [
        "42S22",
        1054,
        "Unknown column 'Supplier.id' in 'where clause'"
    ],
    "queryString": "SELECT `Supplier`.`id_supp`, `Supplier`.`company_name`, `Supplier`.`contact_name`, `Supplier`.`contact_title`, `Supplier`.`address`, `Supplier`.`postcode`, `Supplier`.`phone`, `Supplier`.`fax`, `Supplier`.`www`, `Supplier`.`active`, `Supplier`.`created`, `Supplier`.`modified` FROM `tn`.`suppliers` AS `Supplier`   WHERE `Supplier`.`id` = '54f4dc83-0bd0-4fdd-ab8b-0a08ba3b5702'    LIMIT 1"
}}

因为cakefp使用约定而不是配置,所以应该将id用于表主id字段。在你的例子中,你可以找到你想要的东西:

public function view($id = null) {
    $supplier = $this->Supplier->find('first', array(
        'conditions' => array(
            'Supplier.id_supp' => $id
        )
    ));
    $this->set(array(
        'supplier' => $supplier,
        '_serialize' => array('supplier')
    ));
}

或者像这样:

public function view($id = null) {
    $this->Supplier->primaryKey = $id;
    $supplier = $this->Supplier->find('first');
    $this->set(array(
        'supplier' => $supplier,
        '_serialize' => array('supplier')
    ));
}

或者像这样:

public function view($id = null) {
    $supplier = $this->Supplier->findByIdSupp($id);
    $this->set(array(
        'supplier' => $supplier,
        '_serialize' => array('supplier')
    ));
}

选择最让你高兴的。

最新更新