2016-11-23 54 views
0

我已经建立了这个yii2应用,在那里我有一个型号命名客户获得值,和另一个名为订购,其中CUSTOMER_ID是订购外键。Yii2从相关型号

我已经创建了一个名为SendEmail的动作,这是在订单索引页使用,我需要得到的订单将会被发送到根据CUSTOMER_ID的电子邮件。

所以,我怎么能得到根据客户当前订购的电子邮件?

客户型号:

<?php 

namespace app\models; 

use Yii; 

class Customer extends \yii\db\ActiveRecord 
{ 
    /** 
    * @inheritdoc 
    */ 
    public static function tableName() 
    { 
     return 'customer'; 
    } 
public function rules() 
{ 
    return [ 
     [['Name'], 'required'], 
     [['Archive', 'Credit'], 'integer'], 
     [['Address'], 'string'], 
     [['Name', 'Email'], 'string', 'max' => 50], 
     [['Tel'], 'string', 'max' => 14], 
     [['Category'], 'string', 'max' => 25], 
    ]; 
} 

/** 
* @inheritdoc 
*/ 
public function attributeLabels() 
{ 
    return [ 
     'Id' => 'ID', 
     'Name' => 'Name', 
     'Tel' => 'Tel', 
     'Email' => 'Email', 
     'Archive' => 'Archive', 
     'Credit' => 'Credit', 
     'Address' => 'Address', 
     'Category' => 'Category' 
    ]; 
} 

/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getOrders() 
{ 
    return $this->hasMany(Order::className(), ['Customer_Id' => 'Id']); 
} 
} 

这里是在控制器中的作用:

public function actionSendEmail($id) 
{ 
    //Here I should get the email according to the customer_id 

    if ($model->load(Yii::$app->request->post())) 
    { 

      $value= Yii::$app->mailer->compose() 
      ->setFrom (['[email protected]'=>'Smth']) 
      ->setTo ($model->Email) 
      ->setSubject ("Price Offer") 
      ->setHtmlBody ("Test") 
      ->send(); 

     $model->save(); 
     return $this->redirect(['view','id'=>$model->id]);} 
     else 
      return $this -> render('create',['model'=>$model,]); 
    } 
+0

您是否定义了Yii 2中两个模型之间的关系? – Bizley

+0

是的,我确实做到了。 –

+0

那么究竟是什么问题呢?你有关系,你可以获取模型并获得客户的电子邮件。 – Bizley

回答

1

您还需要申报您的订单模型类的关系:

<?php 

namespace app\models; 

use Yii; 

class Order extends \yii\db\ActiveRecord 
{ 
    ... Some code here ... 

    /** 
    * @return \yii\db\ActiveQuery 
    */ 
    public function getCustomer() 
    { 
     return $this->hasOne(Customer::className(), ['Id' => 'Customer_Id']); 
    } 
} 

这样你就可以得到这样的电子邮件:

$email = $order->customer->Email; 
0

如果您在您的模型中定义了关系,在这种情况下,您可以使用关系轻松访问相关数据,无论是从订单到订单还是反之亦然。

您只需要将模型实例与相关模型的关系作为属性进行访问。 例如,如果你有负荷消费实例,并需要你这样做的命令:

$customer->orders[i]->[property or method of the related model you demand access] 

(请注意,上述i是客户的要求顺序的索引,因为关系是one to many和客户可能有多个订单)

如果你有订单之一,你需要访问下令客户你这样做:

$order->customer->[property or method of the related model you demand access] 

PS:它始终是一个很好的做法,来定义关系您的两款车型都会在customerorder车型中进行定义。

您可以通过查看This Document了解Yii2中的关系及其定义。