Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.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 Yii2 GridView显示来自多个表的数据_Php_Gridview_Yii_Yii2 - Fatal编程技术网

Php Yii2 GridView显示来自多个表的数据

Php Yii2 GridView显示来自多个表的数据,php,gridview,yii,yii2,Php,Gridview,Yii,Yii2,我有三个表:产品、字段和产品字段。 产品字段有两个外键:product_id和field_id 产品有许多产品字段 一个字段有许多产品字段 product\u字段有一个product和一个字段 product表包含一个id和一个名称(例如“book”)。 字段表包含id和名称(例如“ean代码”) product_字段表包含一个id、一个product_id、一个field_id和一个值(例如“19886431”) GII生成的ActiveRecord模型中存在每个表的关系 我的控制器操作如下所

我有三个表:
产品
字段
产品字段
。 产品字段有两个外键:
product_id
field_id

产品
有许多
产品字段

一个
字段
有许多
产品字段

product\u字段
有一个
product
和一个
字段

product
表包含一个id和一个名称(例如“book”)。
字段
表包含id和名称(例如“ean代码”)
product_字段
表包含一个id、一个product_id、一个field_id和一个值(例如“19886431”)

GII生成的ActiveRecord模型中存在每个表的关系

我的控制器操作如下所示:

$producSearchModel = new ProductSearch();

$params = Yii::$app->request->queryParams;

$productDataProvider = $productSearchModel->search($params);

return $this->render('index', [
  'productSearchModel'   => $productSearchModel,
  'productDataProvider'  => $productDataProvider,
]);
public function search($params){

    $query = new Query();
    $query  ->select([ '*', 'field.name as fieldname'])
      ->from('product')
      ->join(   'INNER JOIN',
          'product_field',
        'product_field.product_id = product.id'
      )  ->join(    'INNER JOIN',
        'field',
        'product_field.field_id = field.id'
      );


    $dataProvider = new ActiveDataProvider([
      'query' => $query,
      'pagination' => [
        'pageSize' => 30,
      ],
    ]);

    if (!($this->load($params) && $this->validate())) {
      return $dataProvider;
    }

    return $dataProvider;

}
productSearchModel中的My search()函数如下所示:

$producSearchModel = new ProductSearch();

$params = Yii::$app->request->queryParams;

$productDataProvider = $productSearchModel->search($params);

return $this->render('index', [
  'productSearchModel'   => $productSearchModel,
  'productDataProvider'  => $productDataProvider,
]);
public function search($params){

    $query = new Query();
    $query  ->select([ '*', 'field.name as fieldname'])
      ->from('product')
      ->join(   'INNER JOIN',
          'product_field',
        'product_field.product_id = product.id'
      )  ->join(    'INNER JOIN',
        'field',
        'product_field.field_id = field.id'
      );


    $dataProvider = new ActiveDataProvider([
      'query' => $query,
      'pagination' => [
        'pageSize' => 30,
      ],
    ]);

    if (!($this->load($params) && $this->validate())) {
      return $dataProvider;
    }

    return $dataProvider;

}
现在一切看起来都很好,我的网格列显示了2行和所有字段,这正是它应该做的

我想显示的是一列字段的名称,以及每行的from product_字段

它应该是什么样子的:


有人能告诉我如何做到这一点吗?

你应该检查以下内容,这样它才能工作:

  • 产品有许多
    product\u字段
    ,因此
    product\u字段
    的数据应该在产品视图操作下可见,例如:
    /product/1
  • ProductController
    视图
    操作中,您拥有当前产品的ID,因此可以执行以下操作:

    $productFieldSearchModel=new ProductFieldSearch();
    $productFieldSearchModel->product_id=$productId;
    $dataProvider = $productFieldSearchModel->search(Yii::$app->request->queryParams);
    
  • 现在,您可以通过产品顶部和顶部的
    DetailView
    传递到渲染视图 在其下方,您可以看到此特定项目的产品字段的
    GridView


我明白你的意思,但我希望在GridView中得到完整的结果(因此没有详细视图),因为我还希望对product_字段值进行过滤和排序。我想我需要一个SQL查询,它将返回一个产品行,由field.names作为一列填充,其值来自product_field.value。我不知道这是否可能