我是CakePHP的新手,仍然在學習解決每個問題。CakePHP從另一個表中獲取記錄(如果ID匹配)
我有兩個表:客戶和商店。在商店表中,我有一個名爲customer_id的外鍵,它持有客戶表中的客戶ID。
在CakePHP中,我爲上面的表創建了控制器,模型和視圖。從視圖操作中的CustomerController.php中,我試圖獲得與客戶ID匹配的商店。
CustomerController.php頁:
class CustomersController extends AppController
{
public function index()
{
$customers = $this->Customers->find('all'); // Find all the records from the database.
$this->set('customers', $customers);
$stores = $this->Customers->Stores->find('all');
$this->set('stores', $stores);
}
public function view($id = NULL)
{
$customer = $this->Customers->get($id); // Find a record for individual record.
$this->set('customer', $customer);
// $stores = $this->Customers->Stores->find('all');
$stores = $this->Customers->Stores->find('list', [
'keyField' => 'id',
'valueField' => 'store_name'
]);
$this->set('store', $stores);
}
}
SQL表:
CREATE TABLE IF NOT EXISTS `customers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`first_name` varchar(50) DEFAULT NULL,
`last_name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
--
-- Dumping data for table `customers`
--
INSERT INTO `customers` (`id`, `first_name`, `last_name`) VALUES
(1, 'Ray', 'Mak'),
(2, 'John', 'Smith'),
(3, 'Mike', 'Gorge');
-- --------------------------------------------------------
--
-- Table structure for table `states`
--
CREATE TABLE IF NOT EXISTS `states` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`state_name` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
--
-- Dumping data for table `states`
--
INSERT INTO `states` (`id`, `state_name`) VALUES
(1, 'TX'),
(2, 'VA'),
(3, 'WI'),
(4, 'AZ'),
(5, 'FL');
-- --------------------------------------------------------
--
-- Table structure for table `stores`
--
CREATE TABLE IF NOT EXISTS `stores` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`customer_id` int(11) DEFAULT NULL,
`store_name` varchar(50) DEFAULT NULL,
`corp_name` varchar(200) DEFAULT NULL,
`street_address` varchar(200) DEFAULT NULL,
`city` varchar(50) DEFAULT NULL,
`state_id` int(11) DEFAULT NULL,
`zipcode` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `customers_idx` (`customer_id`),
KEY `states_idx` (`state_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
查看網頁:
<pre>
<?php
print_r(json_encode($store));
print_r(h($customer));
?>
</pre>
我可以使用自定義的SQL查詢與左連接得到的結果,但在cakephp中令人困惑的是,如何在id匹配時從另一個表中獲取數據。
任何幫助將不勝感激:)
我想我解決我自己的問題。我能夠使用需要一段時間才能理解的條件,因爲cakephp上的文檔在解釋事物時不太清楚。 '$ stores = $ this-> Customers-> Stores-> find('all',['conditions'=> array('Stores.id'=> $ id)]);' – Ray
並嘗試$ this- >客戶 - >商店 - > findById($ ID); –
並閱讀[關聯]手冊部分(http://book.cakephp.org/3.0/en/orm/associations.html)。如果你正確地設置了你的模型(如果你使用烘焙工具,這會自動完成),你在客戶視圖方法中的查詢應該只是'$ this-> Customers-> get($ id,['contains' => ['商店']]);' –