2016-06-23 4 views
0

Я реализовал много разных правил между двумя моделями yii2: слайдер, изображения, слайдеры_изображения, где 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 ().):

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.'); 
    } 
} 

Если я отладка $ переменных изображений в представлении этого пустое значения и не содержат соответствующие изображения. Как я могу установить модели для получения правильного доступа в отношениях?

Edit:
при попытке получить доступ на slidersImage, чтобы получить строки juncyion таблицы: $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 | 

Ed 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