Yii2 -如何通过数据透视表筛选相关模型


Yii2 - How to filter a related model via a pivot table

这是我的第一个问题,我希望有人能帮助我。

如何过滤相关模型(通过数据透视表)?

模型一个, 模型A_B ,和模型B A_B 是主( id、a_id b_id

我在GridView中显示所有 a 实例,我收集容易相关的B模型。但是完全不知道如何过滤那些B模型。

您可以通过使用hasMany关系和过滤器来使用多关系,如下所示。

Model A文件

namespace app'models;
use Yii;
class A extends yii'db'ActiveRecord 
{
....
function getRelated(){
return $this->hasMany(B::className(), ['id' => 'b_id'])
->viaTable(A_B::tableName(), ['a_id' => 'id']);
}
....
}

在编写过滤器查询时,添加如下关系:

Model ASeach文件

namespace app'models;
use Yii;
class ASearch extends app'models'A
{
var $title = null;
public function search($params) {
$modelA = A::find();
$dataProvider = new yii'data'ActiveDataProvider([
  'query' => $query,
]);
$this->load($params);
$modelA->joinWith(['related']); //like this you can add more relations
$modelA->andFilterWhere(['like', 'b_title', $this->title]);
return $dataProvider;
}
}