簡體   English   中英

Laravel 急切加載兩個模型之間的關系導致其他模型之間的關系返回錯誤結果

[英]Laravel Eager loading of a relationship bettween two models causes a relationship between other models return wrong results

我有兩個名為 Question and Answer 的 Eloquent 模型,它們之間存在一對多關系(一個問題有很多答案)。 Question.php 中的 hasMany 關系稱為answers

我還有一個用戶和一個公司 model,它們之間存在多對多關系,它們使用 pivot model,這樣定義:

用戶.php

public function companies()
{
    return $this->belongsToMany(Company::class)
        ->using(CompanyUser::class);
}

公司.php

public function users()
{
    return $this->belongsToMany(User::class)
        ->using(CompanyUser::class);
}

當我檢索一個問題並延遲加載它的答案時:

Question::find(58)->answers;

一切正常。 當我使用急切加載時,問題就來了:

Question::with('answers')->get();

奇怪的事情發生了。 在 Question model 的 answers() 關系方法中,我需要獲取當前用戶的第一家公司才能修改關系:

auth()->user()->companies->first();

我的應用程序中的大多數用戶都有一個公司附屬於他們,當使用急切加載時,雖然auth()->user()->companies返回的不是一個,而是 134 個公司,即使在數據庫中我只有 5 個公司和當前用戶只屬於一個。 當我轉儲auth()->user()->companies集合的內容時,我看到第一家公司 model 存在 130 次,其他 4 家公司也包括在內。

這僅發生在answers()方法中並且僅在使用急切加載時發生。 任何想法為什么?

環境:

  • Laravel 版本:6.20.6
  • PHP 版本:8.0.1
  • Apache:2.4.26
  • 數據庫:10.1.27-MariaDB

我認為您需要獲取有關該問題的更多信息。 我通常做的是插入 ddd() 並檢查查詢選項卡以查看 Laravel 用於獲取數據的查詢。 這可能會更清楚地說明問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM