在Yii 2.0 Framework中使用ActiveRecord加入查询

时间:2015-07-28 06:52:23

标签: php yii2

我正忙着与ActiveRecord合作。

$coupons = Coupon::find()
                     ->select(['{{coupon}}.*','({{website}}.`websitename`) AS WebsiteName'])
                     ->leftjoin('website', '`coupon`.`websiteid`=`website`.`websiteid`')
                     ->limit(10)
                     ->all();

这是连接查询,但它只填充“Coupon”类的属性/属性,这些属性/属性似乎是书籍。如何从其他表“网站”访问列?

<?php foreach ($coupons as $coupon): ?>
            <li>
                <?= $coupon->WebsiteName?><br>
            </li>
<?php endforeach; ?>

这个抛出“unknownPropertyType”异常。

2 个答案:

答案 0 :(得分:4)

将公共属性添加到优惠券public $WebsiteName;

作为另一种选择,您可以通过在优惠券模型中定义relation来访问 WebsiteName

public function getWebsite()
{
    $this->hasOne(Website::classname(), ['websiteid' => 'websiteid']);
}

然后更改您的查询:

$coupons = Coupon::find()->with('website')->limit(10)->all();

然后访问属性:

<?php foreach ($coupons as $coupon): ?>
    <li>
        <?= $coupon->website->WebsiteName?><br>
    </li>
<?php endforeach; ?>

答案 1 :(得分:0)

使用print_r($coupon)查看您的模特的结构。要获得名称,您必须拨打以下内容:$coupon->website->Name

但我建议您使用链接hasOne / hasMany。 阅读详细信息here