SQL Join视图在Yii2中不起作用

时间:2016-01-25 07:57:11

标签: php mysql yii2

我正在使用3个表(property,property_rooms,property_images)。我有一个SQL查询,需要在Yii动作和视图中实现它。

SELECT * FROM property JOIN property_rooms ON property.property_id = property_rooms.property_id JOIN property_images ON property.property_id = property_images.property_id 

在控制器/动作中,我使用了以下代码:

$sql ='SELECT * FROM property JOIN property_rooms ON property.property_id = property_rooms.property_id JOIN property_images ON property.property_id = property_images.property_id';
$properties = property::findBySql($sql)->all();          
return $this->render('index',['properties'=>$properties]);

在View文件中,我使用了:

<?php foreach ($properties as $property): ?>
    <?= $property->property_id ?>
    <?= $property->price?>
<?php endforeach; ?>

显示第一个表的值,但访问&amp;显示其他表格的值。

1 个答案:

答案 0 :(得分:1)

因为您正在使用

$properties = property::findBySql($sql)->all();          

$properties将包含属性模型。

您可以使用

定义关系(例如propertyRooms)和访问它们
<?php foreach ($properties as $property): ?>
    <?= $property->property_id ?>
    <?= $property->price?>
    <?php foreach($property->propertyRooms as $pr) : ?>
           <?php /* ... */ ?>
    <?php endforeach; ?>
<?php endforeach; ?>

例如,propertyRooms属性可以在属性模型中定义为:

public function getPropertyRooms() { return $this->hasMany(PropertyRoom::className(), ['property_id' => 'property_id']); }

最后,我将使用ActiveDataProvider方法获取属性数据:

$properties = property::find()->with('propertyRooms')->all();

因此,您只需一步即可获得所有属性数据。