表yii2的关系

表yii2的关系,yii2,Yii2,我有3个表(订单,订单交付,订单类型)。每张桌子都有模型。对于order,我创建GridView。表订单有列订单编号,表订单交货有订单编号和订单交货,表订单类型有交货类型和交货类型。为了写函数 public function getType() { return $this->hasOne(OrderDelivery::className(), ['order_id' => 'order_id']) ->viaTable('delivery-types

我有3个表(
订单
订单交付
订单类型
)。每张桌子都有模型。对于order,我创建GridView。表
订单
有列
订单编号
,表
订单交货
订单编号
订单交货
,表
订单类型
交货类型
交货类型
。为了写函数

public function getType() {
    return $this->hasOne(OrderDelivery::className(), ['order_id' => 'order_id']) 
        ->viaTable('delivery-types', ['delivery-types_code' => 'order_delivery_code']); 
}
索引中
我写
类型。交货类型\u名称
-有

获取未知属性:backend\models\Order::Order\u delivery\u代码

我做错了什么

Upd。(我的错)


您的表是否命名为
delivery-types
,其列是否命名为
delivery-types\u-code
?在db中使用连字符?@Bizley,我使用了很多列和表,它们的名称都很糟糕。我不会创建它,只是使用它)Yii 2将列映射为对象属性,因此列名中包含属性名中不允许的字符(如连字符)可能会出现问题。有没有机会在DB中修改它们,或者创建一个带别名的DB视图?@Bizley当我在gii中为表(如
订单交付
)创建模型时,我遇到了很多问题。我不得不用vendor\yiisoft\yii2 gii\generators\model\Generator.php中的规则注释掉几行。创建模型后,我取消了对它的注释。我刚刚在这个数据库中选择了。就像我说的,yii2使用ActiveRecord模式,这就是为什么必须保持一些列命名约定才能正常工作的原因。如果你坚持你现在得到的名字,你可以使用其他的ORM,比如
原则
,但是你必须自己准备。
public function getType(){
    return $this->hasOne(DeliveryTypes::className(), ['delivery-types_code' => 'order_delivery_code'])
        ->viaTable('order_delivery', ['order_id' => 'order_id']);
}