2016-06-23 159 views
0

我已經在兩個yii2模型之間實現了多對多的關係: slider,images,sliders_images其中sliders_images是結點表。 每個模型都擴展了由Gii生成的基本模型,所以當我需要時我可以覆蓋基本模型而不會丟失個人方法。
Slider.php
Yii2多對多模型關係

... 
public function getImages(){ 
    return $this->hasMany(Images::className(), ['id' => 'image_id']) 
     ->viaTable('sliders_images', ['slider_id' => 'id']); 
} 
... 

Images.php

... 
public function getSlider(){ 
    return $this->hasMany(Slider::className(), ['slider_id' => 'id']) 
     ->viaTable('sliders_images', ['image_id' => 'id']); 
} 
... 

SlidersImages.php

... 
/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getImage() 
{ 
    return $this->hasOne(Images::className(), ['id' => 'image_id']); 
} 

/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getSlider() 
{ 
    return $this->hasOne(Slider::className(), ['id' => 'slider_id']); 
} 
... 

當我使用的功能鏈接()來popolate上創建結表滑塊一切正常,但當我嘗試從滑塊ActiveRecord對象獲取圖像時發生問題(Yii2 documentation):

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

protected function findModel($id) 
{ 
    if (($model = Slider::findOne($id)) !== null) { 
     return $model; 
    } else { 
     throw new NotFoundHttpException('The requested page does not exist.'); 
    } 
} 

如果我在視圖中調試$ images變量,它是空的並且不包含相關圖像。 如何設置模型以獲得關係中的正確訪問權限?

編輯:
當我嘗試在slidersImage訪問得到jun​​cyion表中的行:$slider->sliderImage做工精細,錯過在圖像行的訪問。

滑塊表

 
id | nome   | descrizione | active 
------------------------------------------- 
28 | adfjkhbfvòja | JAFNHÒDF  | 1 


sliders_images表

 
slider_id | image_id | display_order| 
-------------------------------------- 
28  | 16  | 3   | 
-------------------------------------- 
28  | 17  | 5   | 


圖像表

 
id | date    | url  | 
------------------------------------ 
16 | 2016-06-21 16:21:04 | img/url | 
------------------------------------ 
17 | 2016-06-21 16:22:37 | img/url | 

埃德IT2:

從調試的數據庫序列:

 

    1 11:27:02.666 0.7 ms SHOW SHOW FULL COLUMNS FROM `admin` 
    /var/www/html/yii_advance/backend/models/Admin.php (65) 
------------------------------------------------------------------------- 
    2 11:27:02.668 0.6 ms SHOW SHOW FULL COLUMNS FROM `slider` 
    /var/www/html/yii_advance/common/modules/sliders/controllers/SliderController.php (173) 
    /var/www/html/yii_advance/common/modules/sliders/controllers/SliderController.php (79) 
-------------------------------------------------------------------------- 
    3 11:27:02.665 0.6 ms SELECT SELECT * FROM `admin` WHERE (`id`=2) AND (`status`=10) 
    /var/www/html/yii_advance/backend/models/Admin.php (65) 
    [+] Explain 
-------------------------------------------------------------------------- 
    4 11:27:02.667 0.5 ms SELECT SELECT 
     kcu.constraint_name, 
     kcu.column_name, 
     kcu.referenced_table_name, 
     kcu.referenced_column_name 
    FROM information_schema.referential_constraints AS rc 
    JOIN information_schema.key_column_usage AS kcu ON 
     (
      kcu.constraint_catalog = rc.constraint_catalog OR 
      (kcu.constraint_catalog IS NULL AND rc.constraint_catalog IS NULL) 
     ) AND 
     kcu.constraint_schema = rc.constraint_schema AND 
     kcu.constraint_name = rc.constraint_name 
    WHERE rc.constraint_schema = database() AND kcu.table_schema = database() 
    AND rc.table_name = 'admin' AND kcu.table_name = 'admin' 
    /var/www/html/yii_advance/backend/models/Admin.php (65) 
    [+] Explain 
-------------------------------------------------------------------------- 
    5 11:27:02.669 0.5 ms SELECT SELECT 
     kcu.constraint_name, 
     kcu.column_name, 
     kcu.referenced_table_name, 
     kcu.referenced_column_name 
    FROM information_schema.referential_constraints AS rc 
    JOIN information_schema.key_column_usage AS kcu ON 
     (
      kcu.constraint_catalog = rc.constraint_catalog OR 
      (kcu.constraint_catalog IS NULL AND rc.constraint_catalog IS NULL) 
     ) AND 
     kcu.constraint_schema = rc.constraint_schema AND 
     kcu.constraint_name = rc.constraint_name 
    WHERE rc.constraint_schema = database() AND kcu.table_schema = database() 
    AND rc.table_name = 'slider' AND kcu.table_name = 'slider' 
    /var/www/html/yii_advance/common/modules/sliders/controllers/SliderController.php (173) 
    /var/www/html/yii_advance/common/modules/sliders/controllers/SliderController.php (79) 
    [+] Explain 
-------------------------------------------------------------------------- 
    6 11:27:02.669 0.4 ms SELECT SELECT * FROM `slider` WHERE `id`='28' 
    /var/www/html/yii_advance/common/modules/sliders/controllers/SliderController.php (173) 
    /var/www/html/yii_advance/common/modules/sliders/controllers/SliderController.php (79) 

+0

節目表中數據 – Vitaly

+0

@Vitaly一致我希望數據是可以理解的 – MarBer

+0

'die(var_dump($ slider-> images));'? null – Vitaly

回答

1

public $images;屬性應該改名,因爲它有關係的名字getImages()

class Slider extends Sl 
{ 
    const SCENARIO_CREATE = 'create'; 
    const SCENARIO_VIEW = 'view'; 
    const SCENARIO_UPDATE = 'update'; 

    public $images; // This should be renamed 
    ... 
+1

我是個笨蛋! @Vitaly非常感謝支持 – MarBer