我的表格staff
包含字段id
和initials
。
相关表格sales
包含字段seller
和lister
- 这两个字段都应指向initials
表格中的staff
。
因此,在销售表中,可能会有一位不同的工作人员,他是卖方工作人员的卖家 - 这就是我试图实施的关系。
我不确定我能在文档中找到这种东西。
在Sales
模型中,我有规则方法:
[['lister'], 'exist', 'skipOnError' => true, 'targetClass' => Staff::className(), 'targetAttribute' => ['lister' => 'id']],
[['seller'], 'exist', 'skipOnError' => true, 'targetClass' => Staff::className(), 'targetAttribute' => ['seller' => 'id']],
但是,当我尝试通过staff.initials
在gridview中显示关系时,我得到了异常
Getting unknown property: app\models\Sale::staff
我确定我没有在某处正确表示关系,或者我的数据库设计中存在缺陷?
答案 0 :(得分:1)
首先,它听起来像你的数据模型是有缺陷的。我说这个的唯一原因是因为它可能会影响您需要对代码进行哪些更正。
这里的问题是,一些工作人员可能拥有相同的首字母集,在这种情况下,您永远不会知道您的sales
表所指的是谁。我建议您将staff.id
保留在seller
和lister
字段中(而不是initials
)
如果我们能够就上述内容达成一致,那么您的Sales
模型中的关系似乎就错过了。查看official documentation。
您需要将以下方法添加到Sales
模型中:
public function getSeller()
{
return $this->hasOne(Staff::className(), ['id' => 'seller']);
}
public function getLister()
{
return $this->hasOne(Staff::className(), ['id' => 'lister']);
}
完成此操作后,您将能够通过以下方式访问这些:
$sale = Sales::find()->one();
$sale->lister; // will return a Staff object.
$sale->seller; // will return a Staff object.
在gridView中,您应该可以使用seller.initials
和/或lister.initials
显示缩写。
请告诉我这是否适合您。
干杯