假设我有一个
Order
模型,其中有一些关联的 Product
模型,因此 Order
中存在关系:
public function getProducts() {
return $this->hasMany(Product::class, ['id' => 'id_product']);
}
一个产品
Product
可以与多个收购者相关联。所以Product
有一个关系:
public function getAcquisitors() {
return $this->hasMany(Acquisitor::class, ['id' => 'id_acquisitor']);
}
现在,是否可以在
Order
中编写一个关系,返回具有唯一 ActiveQuery
的 Acquisitors
?如果在 Order
我愿意:
public function getAcquisitors() {
return $this->hasMany(Acquisitor::class, ['id' => 'id_acquisitor'])->via('products');
}
这不会返回重复的
Acquisitor
吗?有可能让它们独一无二吗?
不,关系
acquisitors
不会包含重复记录。这是因为 Yii 通过这样的查询独立加载相关模型:
SELECT FROM <related table> WHERE <key> IN (<list of keys>)
当加载定义为“via”的关系时,它首先加载“via”关系中的模型,然后使用它们加载依赖关系中的模型。两种加载都是使用类似于上面提到的查询来完成的。