gpt4 book ai didi

php - Yii2 与关系 + 加入 2 个表

转载 作者:行者123 更新时间:2023-11-29 02:14:53 25 4
gpt4 key购买 nike

我是新手 - Yii2 框架的初学者,需要帮助。我有 table :

电子房间:

编号 |姓名

电子项目:

id|name|id_unit|id_department|price|quantity

电子单位:

编号|名称

电子部门:

编号|名称

在模型 Rooms.php 中

public function relations()
{
return array(
'items_in_room' => array(self::HAS_MANY, 'Items', 'id_room'),
);
}
public function getItems()
{
return $this->hasMany(Items::className(), ['id_room' => 'id'])
}

在 RoomsController.php 中:

public function actionView($id)
{
return $this->render('view', [
'model' => $this->findModel($id),
'room_items' => $this->findModel($id)->items,
]);
}

在 view.php 中:

GridView::widget([
'dataProvider' => new ArrayDataProvider([
'allModels' => $room_items,
'pagination' => [
'pageSize' => 100,
],
'sort' => [
'attributes' => ['number_reference', 'name', 'price'],
],
]),

//'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
[.......]

这会显示此房间中的所有项目 - 没问题,但我如何连接表 e_units 和 e_departments 来获取名称单位和名称部门而不是 od ID?

最佳答案

在您的 Item 模型中定义与 Unit 和 Department 的关系

public function getUnit(){
return $this->hasOne(Unit::className(), ['id' => 'id_unit']);
}
public function getDepartment(){
return $this->hasOne(Department::className(), ['id' => 'id_department']);
}

您可以像这样在 gridview 中将它们用作列:

GridView::widget([
/* ... */
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id', // item id
'name', // item name
'department.name'
'unit.name'
],
/* ... */

为避免 View 中出现过多查询,您可以在构建room_items 数组时加载这些关系

 'room_items' => $this->findModel($id)->getItems()->with(['unit', 'department'])->all()

旁注,检查 yii2 guidelines for schema design ,(旧的 yii 文档,但适用相同的指南)
您应该很好地理解何时以及为什么应该对表、模型和关系使用单数/复数命名

关于php - Yii2 与关系 + 加入 2 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41524218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com