[英]Yii2 with relation + join 2 tables
我是新手 - Yii2 框架的初學者,需要幫助。 我有表:
電子房間:
e_items:
e_units:
e_部門:
在模型 Room.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?
在您的項目模型中定義與單位和部門的關系
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'
],
/* ... */
為避免視圖中的過多查詢,您可以在構建room_items
數組時加載這些關系
'room_items' => $this->findModel($id)->getItems()->with(['unit', 'department'])->all()
附帶說明,請查看 yii2 架構設計指南(舊的 yii 文檔,但適用相同的指南)
您應該很好地理解何時以及為什么應該對表、模型和關系使用單一/復數命名
同樣的過程不起作用:(
table e_items (id, name, id_room, id_previous_room, id_unit, id_department,....)
table e_rooms (id, name)
table e_units (id, name)
table e_departments (id, name)
在視圖 items/view.php 我需要這樣:
id => id
name => name
id_room => name_of_room
id_previous_room => name_of_room
id_unit => name_unit
id_department => name_department
我不知道如何像上面那樣......在 ItemsController 中如何在沒有 SQL 查詢的情況下對單元、房間等的每個 id 建立關系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.