【问题标题】:problem with advanced relationship using codeigniter and datamapper使用 codeigniter 和 datamapper 的高级关系问题
【发布时间】:2011-08-26 13:34:45
【问题描述】:

我有三个表客户,订单和用户 - 用户是登录表,客户持有地址信息等等。

CREATE TABLE IF NOT EXISTS `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `customer_id` int(11) NOT NULL,
  `image_path` varchar(100) NOT NULL,
  `sample_path` varchar(255) NOT NULL,
  `status` enum('new','progress','completed','sent') NOT NULL,
  `placed` date NOT NULL,
  `updated_date` date NOT NULL,
  `will_send` int(1) NOT NULL,
  PRIMARY KEY (`id`)
) 


CREATE TABLE IF NOT EXISTS `customers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `name` varchar(150) NOT NULL,
  `address_1` varchar(150) NOT NULL,
  `address_2` varchar(150) NOT NULL,
  `address_3` varchar(150) NOT NULL,
  `postcode` varchar(50) NOT NULL,
  `phone` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ;


CREATE TABLE IF NOT EXISTS `users` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `group_id` mediumint(8) unsigned NOT NULL,
  `ip_address` char(16) NOT NULL,
  `username` varchar(15) NOT NULL,
  `password` varchar(40) NOT NULL,
  `salt` varchar(40) DEFAULT NULL,
  `email` varchar(100) NOT NULL,
  `activation_code` varchar(40) DEFAULT NULL,
  `forgotten_password_code` varchar(40) DEFAULT NULL,
  `remember_code` varchar(40) DEFAULT NULL,
  `created_on` int(11) unsigned NOT NULL,
  `last_login` int(11) unsigned DEFAULT NULL,
  `active` tinyint(1) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`)
)  ;

我的问题在于用户表中的 ID 是主要的 - 它与客户相关(作为 user_id)然后客户与订单相关

我想做的是让我的订单表在订单和客户中都有基于 customer_id 的关系

我试过了-

var $has_one = array(
                    'customer' => array('join_self_as'=>'customer','join_other_as' => 'user')
                    );

但这不起作用,因为它会产生以下查询 - 它引用 customer.id 而不是 customer.user_id

SELECT * FROM `customers` LIMIT 1 
0.0004       SELECT `customers`.*
FROM (`customers`)
LEFT OUTER JOIN `orders` orders ON `customers`.`id` = `orders`.`customer_id`
WHERE `orders`.`id` = 27 

希望这能解释我想要做什么

【问题讨论】:

    标签: php codeigniter codeigniter-datamapper


    【解决方案1】:

    我认为您不想作为变量加入...我认为您想要的是深度关系查询。

    你可以这样做..

    $order = new Order();
    $order->include_related('customer/user', *, true, true)->get();
    

    然后你可以像这样访问用户:

    $order->customer->user->name;
    

    如果我正确理解了您的问题。

    【讨论】:

    • 不是这样,我如何将关系定义为-订单表中的字段 customer_id 与客户表中的 user_id 相关-
    • 客户表中的user_id是用户表中id字段的外键,对吗?你试过 $has_one = array('customer' => array('class'=>'user')) 吗?
    猜你喜欢
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多