下面是我的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 = 2
在my_right_tabe
中只有一条相关记录。如何在Yii框架2中使用ActiveRecord?如果可能,使用范围是更理想的,否则任何工作解决方案也都很棒。谢谢你们!
答案 0 :(得分:1)
您应该将groupBy
与having
一起使用。试试这个:
$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