首页 > 解决方案 > 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' 带有消息 '试图获取非对象的属性'

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

标签: phpmysqlyii2

解决方案


您的关系getBuku被声明为One-to-Many,因此当您访问 buku 时,$model->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)

推荐阅读