2015-11-15 60 views
0

我想創造CakePHP的web服務,但主鍵不id_supp而是採取默認的值id使用CakePHP REST風格的WS與主鍵不同,默認的「身份證」

這是模態:

<?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

/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" 
}} 
+0

你使用的是什麼版本的cakephp? – skywalker

+0

它是版本2.3 – Shinigami

回答

1

因爲CakePHP的使用約定優於配置你應該使用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') 
    )); 
} 

選擇什麼都高興,你最。

+0

這爲我工作。謝謝。 – Shinigami