php - 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' 带有消息 '试图获取非对象的属性'
这里有什么问题?谢谢你。解决了
解决方案
您的关系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)
推荐阅读
- swift - 过早调用完成处理程序
- reactjs - Chrome 开发者工具显示 JSON 对象的不同值
- r - 如何在 tmap 中指定多面板布局两侧的标签?
- twilio - 无法从 Twilio Studio 创建任务
- java - 错误:对重载定义的模糊引用,Scala 中的 ND4J
- python - Python for Maya - 滑块换色器
- java - 获取请求适用于 POSTMAN,但在我的 Java 应用程序中引发垃圾响应
- tsql - 如何在 Sql server 中使用作业计划运行顺序作业
- python - Python 单元测试 flask_restful - RequestParser
- angular - Angular - 如何根据垫选择下拉显示文本/字符串/日期类型