为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel:一对多关系中的自定义外键无法解决

Laravel:一对多关系中的自定义外键无法解决

PHP
炎炎设计 2023-10-15 17:07:35
有两个模型User和Submission,一个 User 可以有任意数量的提交,其中他被引用为Author。我已经根据文档建立了关系,结果hasMany()工作正常。只是该belongsTo()方法没有返回预期的对象。这是我的模型的迁移:Schema::create('users', function (Blueprint $table) {    $table->id();});Schema::create('submissions', function (Blueprint $table) {    $table->id();    $table->foreignId( 'author' );    $table->foreign( 'author' )->references('id')->on('users');});这些是我的模型中的关系:class User extends Authenticatable {    public function submissions() {        return $this->hasMany( 'App\Submission', 'author' );    }}class Submission extends Model {    public function author() {        return $this->belongsTo( 'App\User', 'author' );    }}现在,在我的控制器中我想执行以下代码:$author = Submission::find(1)->author;dd($author);但是,打印的是存储的作者 ID 的整数值,而不是用户对象。这种关系似乎并没有通过该author()方法解决。另一方面,当我获取用户及其提交内容时,一切都按预期进行,即提交内容被打印为对象:$u = User::find(1)->submissions;dd($u);但是,当我没有定义自定义外键并将列重命名为时,从提交到用户的关系确实得到了正确解决。belongsToauthor_id有效的配置是这样的://migration for Submissions tableSchema::create('submissions', function (Blueprint $table) {    $table->id();    $table->foreignId( 'author_id' );    $table->foreign( 'author_id' )->references('id')->on('users');});//within Submission modelpublic function author() {    return $this->belongsTo( 'App\User' );}我有一种感觉,我错过了一些东西。我还需要建立任何额外的链接吗?我浏览了文档和网络来寻找解决方案,但没有成功。如果没有其他解决方案,我将重命名该列。但我宁愿了解问题的原因并使用我的原始设计。
查看完整描述

1 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

您不应使用相同的字符串来命名关系函数和字段。

当你有一个专栏author并且public function author()Laravel 首先会获取专栏内容。

将 '_id' 添加到列中,这样您就不需要在$this->belongsTo( 'App\User', 'author' );.


查看完整回答
反对 回复 2023-10-15
  • 1 回答
  • 0 关注
  • 59 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信