Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend Framework 2:如何从联接表中获取列?_Php_Mysql_Join_Zend Framework2 - Fatal编程技术网

Php Zend Framework 2:如何从联接表中获取列?

Php Zend Framework 2:如何从联接表中获取列?,php,mysql,join,zend-framework2,Php,Mysql,Join,Zend Framework2,我正在使用Zend Framework 2.4和TableGateway,需要执行以下查询: SELECT products.title, student.firstname, orders.order_id, orders.profile_id, orders.status FROM student INNER JOIN (products INNER JOIN orders ON products.product_id = orders.product_id)

我正在使用Zend Framework 2.4和
TableGateway
,需要执行以下查询:

SELECT products.title, student.firstname, orders.order_id, 
  orders.profile_id, orders.status
FROM student 
INNER JOIN 
 (products 
   INNER JOIN orders ON products.product_id = orders.product_id) 
     ON student.student_id = orders.student_id 
WHERE (((orders.profile_id)='.$id.'));
以下是我正在使用的:

$select = $this->tableGateway->getSql()->select();
$select->columns(array('*'))
        ->join('products', 'products.product_id = orders.product_id', array('title'))
        ->join('student', 'student.student_id = orders.student_id', array('first_name'))
        ->where(array('orders.profile_id' => $id));
$items = $this->tableGateway->selectWith($select);
return $items;
问题是,
$items
不包含列
title
first\u name
。它只包含orders表中的列。
我需要做什么才能获取
$items
以包含来自联接表的列?

尝试使用关联数组

$select = $this->tableGateway->getSql()->select();
$select->columns(array('*'))
    ->join('products', 'products.product_id = orders.product_id', array('title' => 'product_title'))
    ->join('student', 'student.student_id = orders.student_id', array('first_name' => 'student_first_name'))
    ->where(array('orders.profile_id' => $id));
$items = $this->tableGateway->selectWith($select);
return $items;

有趣的是,看看这篇文章:这个人有完全相反的问题,所以本质上你的解决方案(不要添加列(数组)))我在没有列(数组('*'))的情况下尝试过。没有更改,title和first_name仍然不是$items的成员。
$this->tableGateway->getSql()->select():您的基本查询是什么?您可能需要在查询中从('orders',array with columns)
开始执行
->才能获得所需的行为。tableGateway位于orders表上。我尝试了->从('orders',数组(blablabla))。它导致了以下错误-“由于此对象是使用构造函数中的表和/或架构创建的,因此它是只读的。”您必须从头开始查询。。。。