2013-06-13 62 views
0

首先,我只想說,我明白不使用CakePHP的內置功能來查找數據可能會導致漏洞。但是,用戶可以選擇的查詢絕對沒有輸入。它是預先確定和配置的,因此不需要注入任何東西。此外,我正在做一個工會選擇,我還沒有找到這種情況的簡單解決方案。CakePHP在select語句中跳過字段

我有如下表(從phpMyAdmin的出口)

CREATE TABLE `orders` (
    `id` int(10) NOT NULL auto_increment, 
    `userid` int(10) default NULL, 
    `order_status` varchar(12) NOT NULL default 'Not Filled', 
    `email` varchar(50) NOT NULL, 
    `total` varchar(50) NOT NULL, 
    `fullName` varchar(60) NOT NULL, 
    `address` varchar(50) NOT NULL, 
    `city` varchar(50) NOT NULL, 
    `state` varchar(50) NOT NULL, 
    `zip` varchar(15) NOT NULL, 
    `created` datetime default NULL, 
    `modified` datetime default NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; 


CREATE TABLE `order_items` (
    `id` int(20) NOT NULL auto_increment, 
    `orderid` int(10) default NULL, 
    `userid` int(10) default NULL, 
    `item_number` varchar(200) default NULL, 
    `itemName` varchar(200) NOT NULL, 
    `price` varchar(10) default NULL, 
    `quantity` int(10) default NULL, 
    `total` varchar(10) default NULL, 
    `item_status` varchar(20) NOT NULL, 
    `created` datetime default NULL, 
    `modified` datetime default NULL, 
    PRIMARY KEY (`id`), 
    KEY `orderid` (`orderid`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ; 

因爲有不同數量的字段我不能做選擇*與工會選擇兩個表。這裏是我的查詢(使用$這個 - >模型 - >查詢())

select orders.id, orders.userid, orders.order_status, orders.email, orders.total, orders.fullName, orders.Address, orders.city, orders.state, orders.zip, orders.created from orders where userid = '$id' and order_status = 'filled' 
UNION 
select * from order_items where userid = '$id' and item_status = 'filled'" 

這導致order_items.orderid沒有被選中,所以我想選擇字段中單獨

select orders.id, orders.userid, orders.order_status, orders.email, orders.total, orders.fullName, orders.Address, orders.city, orders.state, orders.zip, orders.created from orders where userid = '$id' and order_status = 'filled' 
UNION 
select order_items.id, order_items.orderid, order_items.userid, order_items.item_number, order_items.itemName, order_items.price, order_items.quantity, order_items.total, order_items.item_status, order_items.created, order_items.modified where userid = '$id' and item_status = 'filled'" 

一切,但選擇了order_items.orderid的除外。當我在PHPmyadmin中運行查詢時,它選擇了order_items.orderid,所以我幾乎肯定這是CakePHP。

我甚至試圖改變的OrderID到ORDER_ID,它仍然跳過它

+2

爲什麼你可能想'聯合''訂單'和'order_items'?我可以理解'JOIN',但'UNION' ... – peterm

+0

@peterm你說得對,我不知道我在想什麼。這是一個漫長的一天。我會重新編寫查詢並在明天再回來。感謝您指出。 – user2443591

+0

不客氣。休息一下,祝你好運:) – peterm

回答

1

沒有理由寫自己的查詢。

通過使用屬於核心部分的Containable行爲可以輕鬆解決此問題。

我會假設OrderOrderItem是你的模型,並且有關係。 Order hasMany OrderItem

// Model/Order.php 
public $actsAs = array('Containable'); // Attach containable to your model 

// Controller/OrdersController.php 
public function view($id) { 
    $orders = $this->Order->find('all', array(
    'conditions' => array(
     'Order.id' => $id 
    ), 
    'contain' => array(
     'OrderItem' 
    ) 
)); 
    debug($orders); 
}