【发布时间】:2015-06-03 14:54:57
【问题描述】:
我有以下 3 个表:
Rule
-id
-name
CombinedRule
-id
-name
RuleCombineMapping
-id_rule
-id_combine
我为 Rule 和 CombinedRule 表生成了一个 CRUD。在 CombinedRule 模型类中,我创建了一个映射,该类如下所示:
<?php
namespace app\models;
use Yii;
/**
* This is the model class for table "combinedrule".
*
* @property integer $id
* @property string $name
*/
class CombinedRule extends \yii\db\ActiveRecord {
/**
* @inheritdoc
*/
public static function tableName() {
return 'combinedrule';
}
/**
* @inheritdoc
*/
public function rules() {
return [
[['name'], 'string', 'max' => 255],
[['name'], 'unique']
];
}
/**
* @inheritdoc
*/
public function attributeLabels() {
return [
'id' => 'ID',
'name' => 'Name',
];
}
public function getRules() {
return $this->hasMany(Rule::className(), ['id' => 'id_rule'])
->viaTable(RuleCombineMapping::tableName(), ['id_combine' => 'id']);
}
}
没有成功,我尝试通过在CombinedRuleController 中使用以下行来访问某个组合规则的规则。
$t = CombinedRule::find($id);
var_dump($t->rules);
结果始终是“未知属性”异常。
现在我不仅要查看/更新/读取/删除规则和组合规则,还要查看这两者之间的关系。
我知道这在其他使用原则的框架中是可能的,而且我也知道如何手动执行此操作,首先获取关系,然后将其添加到列表中。
现在有人有一个工作示例,如何使用类似的已建立数据结构映射这些表,并使用其前端模型、视图和表单将其尽可能容易地集成到 Gii CRUD 中?
【问题讨论】:
-
getRules()看起来不错。但是,您可以尝试将方法体替换为return [];,以查看异常是否消失。您还可以重命名 Rule 类和方法,以确定它是否与 Model::rules() 冲突。 docs 或 here 中提供了示例。 -
我已经阅读了您指出的两个网站,遗憾的是我无法在那里找到帮助。
[]括号也无济于事。甚至更改该物业的名称也无济于事....我真的被困住了。我什至考虑编写自己的查询! -
$t真的是一个 CombinedRule 对象吗?CombinedRule::find($id)是 gii 默认生成的实现吗?当你 var_dump 时你看到了什么? -
我得到一个
ActiveQueryclass 和public 'modelClass' => string 'app\models\CombinedRule' (length=23) -
这是一个提示。您得到的是未执行的 ActiveQuery 对象,而不是预期的 Rule 数组。所有 3 个类都继承自 ActiveRecord?您也可以发布您的模型类。而且你没有覆盖 getAttribute 或类似的东西?
标签: php many-to-many yii2