@ZaurK

Как вытащить данные из двух таблиц в yii2?

Здравствуйте! Есть две связанные таблицы production (id, id_category, title, status) и image (id, id_production, imagepath), где каждой записи из production может соответствовать несколько записей из image. Далее пытаюсь вывести картинки из image те, которые соответствуют в production со статусом status=1, причем должна выводится картинка для каждого production вместе с подпистью title:
$dataProvider = new ActiveDataProvider([
    'query' => Production::find()
	          ->joinWith('image')
		  ->where(['image.id_production' => 'id'])
	          ->where(['status' => 1])
	          ->orderBy('id DESC')->limit(12),
    
]);


echo ListView::widget([
    'dataProvider' => $dataProvider,
    'itemView' => '_workitem',
    'summary' => false,
	'emptyText' => '',
	
]);


В _workitem такой код:
<?php
use yii\helpers\Html;
?>

<div class="col-xs-12 col-sm-6 col-md-3 isotope-item <?= Html::encode($model->id_category) ?>">
    <div class="image-box">
        <?php echo Html::a(Html::img("@frontendWebroot/uploads/images/thumbs/$model->imagepath"), "@frontendWebroot/uploads/images/$model->imagepath", ['rel' => 'fancybox', 'title'=>$model->title]); ?>
								<div class="overlay-container">                                       
										<a class="overlay" src="">								
											<i class="fa fa-search-plus"></i>
											<span><?= Html::encode($model->title) ?></span>		
										</a>										
								</div>									
    </div>								
</div>


В итоге получаю ошибку Getting unknown property: frontend\models\Production::imagepath, и так с любым параметром из image, но если подставить параметр из таблицы production, то выводит этот параметр. Из чего делаю вывод, что данное объединение таблиц учитывает только параметры из таблицы production, а мне нужны данные из обоих таблиц. Как это сделать? направьте на правильный путь)
  • Вопрос задан
  • 903 просмотра
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Не вижу тут смысла для join.Надо сделать связь в моделе production
public function getImages(){
   return $this->hasMany(Images::classname(),['id_production'=>'id']);
}

Далее дата провайдер будет выглядеть так
$dataProvider = new ActiveDataProvider([
    'query' => Production::find()
            ->with('images')
            ->where(['status' => 1])
            ->orderBy('id DESC')->limit(12) //обычно лимит задает Pager, но Вам виднее
]);

соответственно взять путь картинки во view _workitem можно было бы так:
echo $model->images->imagepath;
но это при hasOne, а у Вас hasMany поэтому
foreach($model->images as $image){
echo $image->imagepath;
}
//или например взять первый объект из массива объектов
echo $model->images[0]->imagepath;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@ZaurK Автор вопроса
Спасибо, вопрос решился простой заменой вот на эту строчку echo $model->images[0]->imagepath; У меня там выводился массив, а мне нужен был как раз первый элемент. Но join все-таки оставил, не знаю уж нужен ли, но вроде работает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы