2016-11-23 4 views
0

ich diese yii2 App gebaut haben, wo ich ein Modell Kunden und eine weitere namens Auftrag, wo customer_id ist der Fremdschlüssel in Auftrag benannt haben.Yii2 Get Value von Verwandte Modell

Ich habe eine Aktion mit dem Namen Sendemail erstellt, die im Bestellen Indexseite verwendet wird, und ich brauche die E-Mail zu erhalten, die der Auftrag nach dem customer_id gesendet wird.

Wie kann ich die E-Mail für die aktuellen Bestellen nach den Kunden?

Kunden Modell:

<?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']); 
} 
} 

Und hier ist die Aktion in der Steuerung:

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

Haben Sie die Beziehung zwischen zwei Modellen in Yii 2 definiert? – Bizley

+0

Ja, das habe ich definitiv getan. –

+0

Also, was ist genau das Problem hier? Sie haben Beziehung, Sie können Modell holen und erhalten die E-Mail des Kunden. – Bizley

Antwort

1

Sie müssen auch die Beziehung in Ihrem Auftragsmodell Klasse deklarieren:

<?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']); 
    } 
} 

Auf diese Weise können Sie die E-Mail einfach so erhalten:

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

Wenn Sie Beziehungen in Ihren Modellen zu definieren, die in diesem Fall haben Sie die entsprechenden Daten zugreifen können Beziehungen leicht entweder vom Zoll zu Aufträgen oder umgekehrt o verwenden.

Sie müssen lediglich auf die Beziehung von der Instanz des Modells zum zugehörigen Modell als Eigenschaft zugreifen. Zum Beispiel, wenn Sie Kunde Instanz bekam und müssen die Aufträge, die Sie dies tun:

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

(. Beachten Sie, dass die i oben ist der Index der geforderten Bestellung des Kunden, weil die Beziehung one to many und Kunde mehrere Aufträge haben kann)

und wenn Sie einen der Aufträge, und Sie müssen den Kunden zugreifen, die es bestellt Sie dies tun:

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

PS: es ist immer eine gute Praxis, die Beziehungen zu definieren, in beide Modelle und in diesem Fall definieren sie in customer und order Modelle.

Sie können Beziehungen und ihre Definitionen in Yii2 verstehen, indem Sie This Document betrachten.