2015-07-28 66 views
2

我正在用ActiveRecord掙扎大時間。在Yii 2.0框架中使用ActiveRecord加入查詢

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

這是連接查詢,但它只填充類「優惠券」的屬性/屬性,這似乎是書籍。如何從其他表格「網站」訪問一列?

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

這一個拋出一個「unknownPropertyType」異常。

回答

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; ?> 
+0

我已經有一個單獨的網站模型,其中包含一個屬性$ WebsiteName。請讓我知道你的建議是否是一種好的做法。 – ankitG

+0

你這樣做,它會幫助你。另一種方式是通過[關係]訪問此屬性(http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#working-with-relational-data) – Tony

+0

添加新的公共財產工程。謝謝。你能指點我更好的資源爲ActiveRecord? Yii文檔不夠好。 – ankitG

0

使用print_r($coupon)看到your`s模型structire。要獲取名稱,您必須調用類似於:$coupon->website->Name

但我推薦您使用鏈接hasOne/hasMany。 閱讀詳細信息here