在Yii2中关联两个表

时间:2018-05-03 04:31:45

标签: php mysql yii2

我在Buku和Guest之间建立了关系。我想在客人的电子邮件中添加链接下载电子书。表Buku中的字段link_dl

common\models\Buku

public function getGuest()
{
    return $this->hasOne(Guest::className(), ['id_buku' => 'id_buku']);
}

common\models\Guest

public function getBuku()
{
    return $this->hasMany(Buku::className(), ['id_buku' => 'id_buku']);
}

Controller

if($model->load(Yii::$app->request->post()))
    {
        $value = Yii::$app->mailer->compose()
        ->setFrom('myaccount@gmail.com')
        ->setTo($model->email)
        ->setSubject('Download Ebook')
        ->setTextBody($model->buku->link_dl) //link download ebook $model->relationName->field_name
        ->send();
        $model->save();

但是我收到了错误,

  

例外' yii \ base \ ErrorException'与消息'试图获得非对象的属性'

这里有什么问题?谢谢。 已解决

1 个答案:

答案 0 :(得分:0)

您的关系getBuku被声明为One-to-Many,因此当您使用$model->buku访问buku时,您会获得Buku个模型的数组。

如果它真的是One-to-Many类型的关系,你必须选择(使用任何类型的逻辑,或简单得到0索引)你需要的Buku模型:

->setTextBody($model->buku[0]->link_dl)

如果该关系假设为一对一,则需要更改Guest模型中的关系,然后按照代码访问link_dl

// common\models\Guest
public function getBuku()
{
    return $this->hasOne(Buku::className(), ['id_buku' => 'id_buku']);
}

// Controller
->setTextBody($model->buku->link_dl)