有兩個模型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 關注
- 114 瀏覽
添加回答
舉報
0/150
提交
取消