Yii2关系排序和搜索的关系

时间:2017-01-17 13:08:32

标签: sorting yii2

我在Yii2中遇到关系搜索和排序问题。

我可以使用单级关系进行排序和搜索。

说我有这个结构:

属性 - > HAS_MANY-> Key_Sets - > HAS_MANY->键

反向:

键 - > HAS_ONE-> Key_Sets - > HAS_ONE->属性

在键gridview中,我想按属性

进行排序和搜索

我可以按Key_Sets搜索和排序,但不能搜索二级关系

我希望这是有道理的

此致

利亚姆

更新

我有钥匙

public function getKeySet() 
{
    return $this->hasOne(KeySets::className(), ['id' => 'key_set_id']);
}

然后

public function getProperty()
{
    return $this->hasOne(Properties::className(), 'id', 'key_set_id')->via('keySet');
}   

返回

  

为foreach()提供的参数无效

        if (strpos($parentAlias, '{{') === false) {
            $parentAlias = '{{' . $parentAlias . '}}';
        }
        if (strpos($childAlias, '{{') === false) {
            $childAlias = '{{' . $childAlias . '}}';
        }

        $on = [];
        foreach ($child->link as $childColumn => $parentColumn) {
            $on[] = "$parentAlias.[[$parentColumn]] = $childAlias.[[$childColumn]]";
        }
        $on = implode(' AND ', $on);
        if (!empty($child->on)) {
            $on = ['and', $on, $child->on];
        }
    } else {
        $on = $child->on;
    }

在Yupik的惊人帮助下,我有了解决方案

public function getProperty()
{
    return $this->hasOne(Properties::className(), ['id' => 'property_id'])->via('keySet');
}

1 个答案:

答案 0 :(得分:1)

方法via()viaTable()指定与联结表关联的关系。

class Order extends ActiveRecord
{
   public function getOrderItems() {
       return $this->hasMany(OrderItem::className(), ['order_id' => 'id']);
   }

   public function getItems() {
       return $this->hasMany(Item::className(), ['id' => 'item_id'])
                   ->via('orderItems');   // here's the magic
   }
}

文档链接:Yii2 ActiveRelationTrait