有两个模型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' );
.
- 1 回答
- 0 关注
- 88 浏览
添加回答
举报
0/150
提交
取消