1

私にはcustomer、order、userの3つのテーブルがあります。userはログインテーブルで、customerはアドレス情報などを保持しています。

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.user_idではなくcustomer.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 

うまくいけば、これは私がやろうとしていることを説明しています

4

1 に答える 1

0

変数として結合したいとは思わない...あなたが望むのは深い関係のクエリだと思います。

あなたはこれを行うことができます..

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

次に、次のようにユーザーにアクセスできます。

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

それは、私があなたの問題を正しく理解している場合です。

于 2011-08-26T18:31:24.620 に答える