【问题标题】:Why cant I assign $with in the model of both end of the relationship为什么我不能在关系两端的模型中分配 $with
【发布时间】:2023-01-07 00:40:54
【问题描述】:

所以我在这个例子中有两个模型,分别是GigGigImage。这是Gig模型

class Gig extends Model
{
    use HasFactory, Uuids, SoftDeletes;
    
    protected $fillable = [...]
    protected $with = ['gigImages'];



    public function gigImages()
    {
        return $this->hasMany(GigImage::class);
    }
}

如您所见,$with 引用了GigImage,到目前为止一切都按预期进行。 当我对GigImage做了同样的事情时,问题就来了

class GigImage extends Model
{
    use HasFactory;


    protected $fillable = ['image', 'gig_id', 'is_thumbnail'];
    protected $with = ['gig'];

    public function gig()
    {
        return $this->belongsTo(Gig::class);
    }
}

在我将 GigImage 实例分配给 Gig 并尝试在 tinker 上执行 Gig::first() 之后,它只是冻结了一分钟并完全自行停止工作,没有错误消息。如果我试图用任何雄辩的方法提及与这两个模型相关的任何事情,就会发生这种情况。也许有某种无限循环正在进行,但我不确定出了什么问题。

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    看起来您已经使用 hasMany 和 belongsTo Eloquent 关系方法在 Gig 和 GigImage 模型之间建立了关系。每个模型的 $with 属性指定在查询模型时应加载哪些关系。

    您遇到的问题可能是由于两个模型上的 $with 属性引起的无限循环。当您查询 Gig 模型时,会自动加载 gigImages 关系,这反过来会尝试在 GigImage 模型上加载 gig 关系。这会导致查询陷入循环,因为它一直在尝试无限期地加载相关模型。

    要解决此问题,您可以尝试从 Gig 或 GigImage 模型中删除 $with 属性,或者您可以指定在查询模型时使用 with 方法加载哪些关系。例如:

    $gig = Gig::with('gigImages')->first();
    

    这将在 Gig 模型上加载 gigImages 关系,但不会尝试在 GigImage 模型上加载 gig 关系。

    【讨论】:

      猜你喜欢
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      • 2014-12-16
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多