我需要一些关于Yii 2.x框架的帮助。
我有 2 张桌子,stuff
张和 table
张桌子,每张都有自己的模型,Stuff
和Table
。
stuff
和table
共用一个密钥。 stuff
包含链接到table
中的id
的table_id
。
stuff
控制器包含以下代码,用于从stuff
检索所有字段,从table
中检索age
字段:
$model = Stuff::find ()
->select (['`stuff`.*', '`table`.`age`'])
->leftJoin ('table', '`stuff`.`table_id`=`table`.`id`', [])
->where (['table_id' => $id])
->one ()
执行后,$model
包含 stuff
表中的所有内容,但不包含age
字段,即使生成的 SQL 确实检索了它。我发现将public $age;
添加到Stuff
模型中确实存储了age
字段,但这似乎是一个黑客并且感觉很脏。
所以我的问题是,是否可以在不更改原始模型的情况下让 $model
变量来存储引用表中的字段?如果这是不可能的,还有比我已经做过的更正确的做事方式吗?
谢谢!
像这样定义材料模型中的关系
public function getTable()
{
return $this->hasOne(Table::className(), ['id' => 'table_id']);
}
然后你可以通过引用的对象访问它,比如
$model->table->age
您可以以面向对象的方式访问相关的模型字段,如下所示:
$model->table->age
在上面的表达式中,table
是Stuff
模型中的关系名称。