Yii Framework - 将来自不同 table 的字段存储到模型中
Yii Framework - Storing field from a different table into a model
我在 Yii 2.x 框架方面需要一些帮助。
我有 2 个 table,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
table 中的所有内容,但不包含 age
字段,即使生成的 SQL 包含取回它。我发现将 public $age;
添加到 Stuff
模型中确实存储了 age
字段,但是这似乎是一种 hack 并且感觉很脏。
所以我的问题是,是否可以在不改变原始模型的情况下获取 $model
变量来存储引用的 table 中的字段?如果那不可能,有没有比我已经做过的更正确的做事方式?
谢谢!
您可以以面向对象的方式访问相关模型字段,如下所示:
$model->table->age
在上面的表达式中,table
是 Stuff
模型中的关系名称。
像这样在填充模型中定义关系
public function getTable()
{
return $this->hasOne(Table::className(), ['id' => 'table_id']);
}
然后您可以通过
之类的引用对象访问它
$model->table->age
我在 Yii 2.x 框架方面需要一些帮助。
我有 2 个 table,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
table 中的所有内容,但不包含 age
字段,即使生成的 SQL 包含取回它。我发现将 public $age;
添加到 Stuff
模型中确实存储了 age
字段,但是这似乎是一种 hack 并且感觉很脏。
所以我的问题是,是否可以在不改变原始模型的情况下获取 $model
变量来存储引用的 table 中的字段?如果那不可能,有没有比我已经做过的更正确的做事方式?
谢谢!
您可以以面向对象的方式访问相关模型字段,如下所示:
$model->table->age
在上面的表达式中,table
是 Stuff
模型中的关系名称。
像这样在填充模型中定义关系
public function getTable()
{
return $this->hasOne(Table::className(), ['id' => 'table_id']);
}
然后您可以通过
之类的引用对象访问它$model->table->age