簡體   English   中英

Yii2 與關系 + 連接 2 個表

[英]Yii2 with relation + join 2 tables

我是新手 - Yii2 框架的初學者,需要幫助。 我有表:

電子房間:

身份證 | 姓名

e_items:

id|名稱|id_unit|id_department|價格|數量

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM