首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"BookInfo::type必须返回关系实例,但返回null“

"BookInfo::type必须返回关系实例,但返回null“
EN

Stack Overflow用户
提问于 2022-08-12 14:03:21
回答 2查看 33关注 0票数 1

首先,这是我的第一个Laravel项目,这只是我拼凑起来学习的东西,所以请对我轻松一点。

假设我正在创建一个代表库的应用程序。每本书都有一些关于它的信息( BookInfo ),每一本BookInfo都包含一个(参考) BookType,表示它是“虚构的”还是“非虚构的”。

因此,如果我的BookInfo模式看起来有点像:

代码语言:javascript
复制
//...
$table->unsignedBigInteger('book_id');
$table->unsignedBigInteger('book_type_id');

//...
$table->foreign('book_id')->references('id)->on('books');
$table->foreign('book_type_id')->references('id)->on('book_type');

我的BookType模式如下所示:

代码语言:javascript
复制
//...
$table->id();
$table->string('name');

BookInfo模型上返回BookType的方法是什么?

我已经做到了这一点,并且似乎尝试了无数的备选方案(错误略有不同):

代码语言:javascript
复制
public function type()
{
    return BookType::where('book_type_id', $this->book_type_id)->get()->first();
}

是的,我确信我试图查找的id存在于book_type表中。我其实只想要->name的BookType,但很明显,我需要先得到BookType .

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-12 15:13:14

代码语言:javascript
复制
public function type(): BelongsTo
{
    return $this->belongsTo(BookType::class, 'book_type_id');
}

如果将方法名更改为bookType,则可以将第二个参数省略为belongsTo,因为它将根据方法名自动解析外键,您只需执行以下操作:

代码语言:javascript
复制
public function bookType(): BelongsTo
{
    return $this->belongsTo(BookType::class);
}

以下是来自Laravel的雄辩的关系参考:https://laravel.com/docs/9.x/eloquent-relationships

票数 0
EN

Stack Overflow用户

发布于 2022-08-12 15:42:15

用于外键的迁移:$table->foreignIdFor(BookType::class, 'book_type_id');

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73335379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档