我在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');
}
答案 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
}
}