如何在Yii框架2中使用ActiveRecord在右表上选择只有一条记录在相关左表(1:n)中的记录?

时间:2017-03-14 15:27:25

标签: php yii2

下面是我的1:n关系数据库。

my_left_table 
left_id     name 
1            A
2            B
3            C

my_right_tabe
right_id     thing     left_id_fk
1           D          1
2           E          1
3           F          2 
4           G          3
5           H          3
6           I          3

我希望得到以下结果。

 my_left_table 
left_id     name 
2            B

因为left_id = 2my_right_tabe中只有一条相关记录。如何在Yii框架2中使用ActiveRecord?如果可能,使用范围是更理想的,否则任何工作解决方案也都很棒。谢谢你们!

2 个答案:

答案 0 :(得分:1)

您应该将groupByhaving一起使用。试试这个:

$result = MyLeftTable::find()->joinWith('myRightTable rt')->groupBy('rt.right_id')->having(['count(rt.right_id)' => 1]);

假设您的MyLeftTable模型具有多个关系getMyRightTable

答案 1 :(得分:0)

您可以为left_table扩展模型类,添加适当的get函数(例如:getRight)

 class Customer extends ActiveRecord
{
  // ...

  public function getRight()
  {
      return $this->hasMany(MyRightTableModel::className(), ['left_id_fk' => 'left_id']);
  }
}

然后当您访问每个左侧模型时

  $leftModel = MyLeftModel::findOne(123);

你有rightModels是一个rightModels对象的数组

  $rightModels = $leftModel->right;

请参阅som提示指南http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#relational-data