我已经构建了这个yii2应用程序,其中我有一个名为客户的模型,另一个名为订单,其中customer_id是订单
我创建了一个名为 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 (['smth@hotmail.com'=>'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 :(得分:1)
您还需要在Order模型类中声明关系:
<?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;
答案 1 :(得分:0)
如果您在模型中定义关系,在这种情况下,您可以轻松地使用关系从海关到订单访问相关数据,或者反过来使用。
您需要做的就是访问从模型实例到相关模型的关系作为属性。 例如,如果您有costumer实例并需要订单,请执行以下操作:
$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]
P.S:在两个模型中定义关系始终是一个好习惯,在这种情况下,在customer
和order
模型中定义关系。
通过查看This Document,您可以在Yii2
中了解关系及其定义。