Yii2。相关车型
问题描述:
我有3款车型:Item,Serials和SerialsCategories。当我显示Item窗体(创建或更新)时,我需要显示属于上一步中选定的categoryId的连续剧。一个序列可以属于多个类别。Yii2。相关车型
现在,我有我的产品型号:
public function getSerialsTypeByCategory() {
return (new SerialType)->getByCategory($this->itemCategoryId);
}
在我SerialType型号:
public function getByCategory($itemCategoryId) {
return SerialTypeItemCategory::find()->select(['serialTypeId'])->where(['itemCategoryId' => $itemCategoryId])->all();
}
这是工作,它做什么,我需要,但...这是正确的方式?有没有更好的办法?
答
这并不是错误的你在做什么。但有更多的东西 - 检查此链接: Working with Relational Data
如果使用->hasOne
和->hasMany
定义的关系,你的模型上涨了额外的好处,比如懒惰或预先加载加盟:
与一个关系,您还可以使用->link
和->unlink
来添加/删除相关数据,而不必考虑链接的字段。
此外,它很容易定义通过结台关系:
class Order extends ActiveRecord
{
public function getItems()
{
return $this->hasMany(Item::className(), ['id' => 'item_id'])
->viaTable('order_item', ['order_id' => 'id']);
}
}
+0
谢谢很多!我会研究一下viaTable,第一次看到它。 – Eduardo
看来我的权利..代码是在正确的地方(模型),并写在正确的方式(吸气) – scaisEdge