2013-08-01 48 views
0

請幫我!我需要從表'restaurant' - restaurant_longitude獲取字段。如何在zf2中使用tableGateway或Zend \ Db \ Select來做到這一點當我有一個表('user_favorite')與表'餐廳' -restaurant_id.For例如:回場表現如何使用zf2中的外鍵從表中提取數據?

SELECT restaurant_longitude from restaurant,user_favorite where user_favorite.restaurant_id = restaurant.restaurant_id 

我清楚的sql語句

select restaurant_longitude,restaurant_latitude from user_favorite join restaurant on user_favorite.restaurant_id = restaurant.restaurant_id where user_favorite.display_name = 'admin' 

user_favorite.sql;

CREATE TABLE IF NOT EXISTS `user_favorite` (
    `user_favorite_id` int(11) NOT NULL AUTO_INCREMENT, 
    `display_name` varchar(50) CHARACTER SET utf8 NOT NULL, 
    `restaurant_id` int(11) DEFAULT NULL, 
    `attraction_id` int(11) DEFAULT NULL, 
    `user_favorite_timestamp` date NOT NULL, 
    PRIMARY KEY (`user_favorite_id`), 
    KEY `display_name` (`display_name`), 
    KEY `restaurant_id` (`restaurant_id`), 
    KEY `attraction_id` (`attraction_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=42 ; 

ALTER TABLE `user_favorite` 
    ADD CONSTRAINT `user_favorite_ibfk_1` FOREIGN KEY (`display_name`) REFERENCES `user` (`display_name`), 
    ADD CONSTRAINT `user_favorite_ibfk_3` FOREIGN KEY (`attraction_id`) REFERENCES `attraction` (`attraction_id`), 
    ADD CONSTRAINT `user_favorite_ibfk_4` FOREIGN KEY (`restaurant_id`) REFERENCES `restaurant` (`restaurant_id`); 

restaurant.sql

CREATE TABLE IF NOT EXISTS `restaurant` (
    `restaurant_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Уникальный идентификатор ресторана', 
    `restaurant_id_name` varchar(100) NOT NULL COMMENT 'Идентификатор ресторана для маршутизации', 
    `restaurant_name` varchar(100) NOT NULL COMMENT 'Имя ресторана', 
    `restaurant_mode` varchar(100) NOT NULL COMMENT 'Тип ресторана', 
    `restaurant_description` varchar(1000) NOT NULL COMMENT 'Описание ресторана', 
    `restaurant_thumbnail` varchar(100) NOT NULL COMMENT 'Главный рисунок ресторана', 
    `restaurant_image_1` varchar(100) NOT NULL, 
    `restaurant_image_2` varchar(100) NOT NULL, 
    `restaurant_image_3` varchar(100) NOT NULL, 
    `restaurant_features` varchar(200) NOT NULL COMMENT 'Возможности ресторана', 
    `restaurant_dj` varchar(20) NOT NULL, 
    `restaurant_wifi` varchar(20) NOT NULL, 
    `restaurant_karaoke` int(5) NOT NULL, 
    `restaurant_kalian` int(5) NOT NULL, 
    `restaurant_chill_out` int(5) NOT NULL, 
    `restaurant_sigarette_room` int(5) NOT NULL, 
    `restaurant_live_music` int(5) NOT NULL, 
    `restaurant_veranda` int(5) NOT NULL, 
    PRIMARY KEY (`restaurant_id`), 
    KEY `restaurant_id_name` (`restaurant_id_name`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Таблица для описания ресторанов в городе Ялта' AUTO_INCREMENT=95 ; 

UserFavoriteTable.php

public function getFavoriteByUsername($display_name){ 

     $resultSet = $this->tableGateway->select(function (Select $select) use($display_name){ 
      $select->where('user_favorite.display_name = ' . $display_name) 
       ->join('restaurant', 'user_favorite.restaurant_id = restaurant.restaurant_id',array('restaurant_longitude')); 
     }); 
     return $resultSet; 
    } 

在控制器

//username from route array in module.config.php 
$display_name = (string)$this->params()->fromRoute('username',''); 
$favorite = $this->getFavoriteTable()->getFavoriteByUsername($display_name); 
$view->setVariable('favorite',$favorite); 

,但它不工作正常只返回空值( favorite.phml

<? foreach($favorite as $fav): {?> 
          <? echo var_dump($fav->restaurant_longitude); ?> 
         <? }endforeach; ?> 
+0

你能更清楚地從哪個表中更清楚地說出哪些字段?另外,如果我沒有弄錯(這是可能的,但是我需要知道該變量是什麼以及要從哪個表中選擇哪些列),您希望將參數傳遞給select語句 – vanamerongen

回答

1

編輯:好的,那麼顯然你並不需要與用戶表的連接,您只需按顯示名稱去。所以這是如何完成的。

public function getFavoriteByUsername($username){ 
    $resultSet = $this->tableGateway->select(function (Select $select) use($username){ // Here's how you can pass params to a select statement! 
    $select->where('display_name = ' . $username) 
     ->join('restaurant', 'user_favorite.restaurant_id = restaurant.restaurant_id',array('restaurant_longitude', 'restaurant_latitude'); 
    }); 
return $resultSet; 
} 
+0

無法正常工作,出現錯誤瀏覽器 – alfared

+0

錯誤是什麼意思? – vanamerongen

+0

瀏覽器中的錯誤:在此頁面上,發現循環轉發 – alfared

相關問題