如何在Yii2中建立这种关系
我有一个表如何在Yii2中建立这种关系,yii,yii2,Yii,Yii2,我有一个表staff,表中有id和缩写 相关表格sales中有seller和lister字段-这两个字段都应指向staff表格中的首字母 所以在sales表中,可以有一个不同的工作人员是卖家,而另一个工作人员是列表者——这就是我试图实现的关系 我不确定我能在文件里找到这种东西 在Sales模型中,规则方法我有: [['lister'], 'exist', 'skipOnError' => true, 'targetClass' => Staff::className(), 'targ
staff
,表中有id
和缩写
相关表格sales
中有seller
和lister
字段-这两个字段都应指向staff
表格中的首字母
所以在sales表中,可以有一个不同的工作人员是卖家,而另一个工作人员是列表者——这就是我试图实现的关系
我不确定我能在文件里找到这种东西
在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
我肯定我没有在某个地方正确地表示关系,或者我的数据库设计中有缺陷吗?首先,听起来您的数据模型有缺陷。我这样说的唯一原因是,它可能会影响您需要对代码进行的更正
这里的问题是,几个工作人员可能有相同的首字母,在这种情况下,您永远不知道sales
表所指的是谁。我建议您将staff.id
保存在seller
和lister
字段中(而不是缩写
)
如果我们能在上述问题上达成一致,那么听起来您的销售
模式中缺少了一种关系。检查一下
您需要将以下方法添加到销售
模型中:
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
显示首字母
如果对你有效,请告诉我
干杯向我们展示您销售类别中的对应关系我在销售模式中拥有的是上面的内容。是不是有什么我遗漏了银行,但现在我没有得到错误,在gridview中显示“(未设置)”?是DB中的首字母吗?你能在摘要中显示你的gridview调用吗?当构造与数据提供者一起使用的查询时,你是否缺少带有('staff')的->?示例:Sales::find()->with('staff')->all()
。虽然我认为这不是强制性的。数据提供者是否来自SaleSearch模型?如果是这样的话,我使用Gii生成了它,但是没有,它没有与('staff')的关系-尽管我只是尝试了一下,然后它说没有员工关系对不起,我与('lister')和('seller')的关系不好。我发现未设置的错误有点奇怪。这通常意味着该字段设置为空。。但我猜seller/lister的值为1(或任何其他现有行),因此它应该可以工作。