php - 如何在单个查询 Zend Framework 中从相关表返回行

标签 php mysql zend-framework knockout.js zend-db

我有两个表,Restaurants 和 RestaurantHours,我需要在单个结果集中返回它们。对于 Restaurants 表中的每家餐厅,RestaurantHours 表中有 7 条记录。

我正在尝试以下列格式返回数据,以在我的 Knockout ViewModel 中使用。

结果的期望格式(注意省略了一些字段)

array(
 'name' => 'restaurant name here',
 'description' => 'restaurant description here',
 'hours' => array(
               '1' => array('open' => 1, 'day' => 1, 'open_time' => '8:00', 'close_time' => 10:00),
               '2' => array('open' => 1, 'day' => 2, 'open_time' => '8:00', 'close_time' => 10:00),
               '3' => array('open' => 1, 'day' => 3, 'open_time' => '8:00', 'close_time' => 10:00),
               '4' => array('open' => 1, 'day' => 4, 'open_time' => '8:00', 'close_time' => 10:00),
               '5' => array('open' => 1, 'day' => 5, 'open_time' => '8:00', 'close_time' => 10:00),
               '6' => array('open' => 1, 'day' => 6, 'open_time' => '8:00', 'close_time' => 10:00),
               '7' => array('open' => 1, 'day' => 7, 'open_time' => '8:00', 'close_time' => 10:00),
           )
);

到目前为止,我已经能够使用下面的选择获取所有餐厅,但我不确定如何以我想要的格式返回餐厅营业时间,所以在客户端,我会有一个集合一周中每一天的餐厅对象,每个对象都有自己的餐厅营业时间集合。我知道如何连接表,只是不确定如何使用 Zend DB 获得我想要的结果集。

餐厅

  $select = $this->restaurantRepository->select();
  $select->setIntegrityCheck(false)
          ->from('restaurants')
          ->join('food_types', 'restaurants.food_type = food_types.id', array('foodType' => 'name'))               
          ->order('restaurants.name ASC');
  $restaurants = $this->restaurantRepository->getAdapter()->fetchAll($select);  

  return Zend_Json::encode($restaurants);

餐厅营业时间

// fetch all of the restaurant hours for the specified restaurant
$select = $this->restaurantHoursRepository
               ->select()
               ->from('restaurant_hours', array('id', 'restaurant_id', 'open', 'day', 'open_time' => 'DATE_FORMAT(open_time, "%H:%i")', 'close_time' => 'DATE_FORMAT(close_time, "%H:%i")'))
               ->where('restaurant_id = ' . $restaurant_id);

 return Zend_Json::encode($this->restaurantHoursRepository->fetchAll($select));

基本上我需要将这两个查询连接在一起。现在我必须返回所有餐厅,然后当一个餐厅对象绑定(bind)到 ViewModel 时,我获取餐厅营业时间,这意味着很多 ajax 调用。我真的很想把它恢复到只有一个电话,它加载了所有餐厅。

感谢大家的帮助!

最佳答案

你能试试吗

$select = $this->restaurantRepository->select();
$select->setIntegrityCheck(false)
      ->from('restaurants')
      ->join('food_types', 'restaurants.food_type = food_types.id', array('foodType' => 'name'))               
      ->join('restaurant_hours', 'restaurants.id = restaurant_hours.restaurant_id', array('id', 'restaurant_id', 'open', 'day', 'open_time' => 'DATE_FORMAT(open_time, "%H:%i")', 'close_time' => 'DATE_FORMAT(close_time, "%H:%i")'))
      ->order('restaurants.name ASC');
  $restaurantsAndHours = $this->restaurantRepository->getAdapter()->fetchAll($select);  

  return Zend_Json::encode($restaurantsAndHours);

关于php - 如何在单个查询 Zend Framework 中从相关表返回行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20061341/

相关文章:

javascript - php - 选择选项值未传递到帖子

php - Magento 创建一个整数的产品属性

mysql 从转储 : ERROR 1452 (23000) at line 13: Cannot add or update a child row: a foreign key constraint fails 加载

php - 将数据从mysql数据库回显到HTML中的textarea

php - Symfony 依赖注入(inject) : How to represent Closure in YAML service definitions?

MySQL:在插入期间重新使用自动增量

mysql - 两个表之间的关系 : make relationship between two tables

ajax - Zend 表单 ajax 提交验证

php - Zend - 在数据库中存储 session 数据

php - 过去 24 小时内的平均通话时长 ZendFramework