简体   繁体   English

如果ID匹配,则CakePHP从另一个表获取记录

[英]CakePHP get record from another table if the id matches

I am new to CakePHP and still learning as I make my way through each problem. 我是CakePHP的新手,在我逐步解决每个问题时仍在学习。

I have two tables: customers and stores. 我有两个表:客户和商店。 In stores table I have a foreign key called customer_id that holders customer id from customers table. 在stores表中,我有一个名为customer_id的外键,其中包含来自customers表的客户ID。

In CakePHP, I created controllers, models, and view for above tables. 在CakePHP中,我为上述表创建了控制器,模型和视图。 From CustomerController.php in view action, I am trying to get store that matches id of customer. 从CustomerController.php中查看操作,我正在尝试获取与客户ID匹配的商店。

CustomerController.php page: 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 tables: 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 ;

View page: 查看页面:

<pre>
<?php 
print_r(json_encode($store));
print_r(h($customer));
?>
</pre>

I can use a custom SQL query with left join to get the results, but in cakephp its confusing how I can get data from another table when id matches. 我可以使用带有左联接的自定义SQL查询来获取结果,但是在cakephp中,当id匹配时如何从另一个表获取数据令人困惑。

Any help will be appreciated :) 任何帮助将不胜感激 :)

Ray, 射线,

You have mentioned in comments that you resolved your issue, but if you are using the below code in CustomersController :: view function, then $id does not represent stores id. 您在注释中提到已解决了问题,但是,如果您在CustomersController :: view函数中使用以下代码,则$ id不代表商店标识。

$stores = $this->Customers->Stores->find('all',[ 'conditions' => array('Stores.id' => $id)]);

In order to get stores associated with customers, you must refer to below code 为了获得与客户关联的商店,您必须参考以下代码

$stores = $this->Customers->Stores->findByCustomerId($id);
//where $id represents customer_id from stores table

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM