Heim  >  Fragen und Antworten  >  Hauptteil

Das Laravel-Modell verhindert, dass Lazy Loading eine Ausnahme auslöst, wenn die Beziehung „whenLoaded()“ in der Ressource verwendet wird

Ich habe vor kurzem angefangen, Model::preventLazyLoading() zu verwenden Aber auch wenn die Beziehung nicht geladen wird, was manchmal der Fall sein könnte, wird tatsächlich ein Fehler ausgegeben

Gefällt mir Ressourcen 'discount' => $this->whenLoaded('meta', $this->meta->discount ?? 0),

Laravel-Version: 9.17.0

P粉614840363P粉614840363311 Tage vor410

Antworte allen(1)Ich werde antworten

  • P粉920835423

    P粉9208354232024-01-06 11:06:13

    PHP 在此处解析您的语法。无论如何,它都必须加载 $this->meta,因为当 PHP 解析您的代码时,它优先于 whenLoaded() 方法.

    $this->whenLoaded('meta', $this->meta->discount ?? 0)

    这就是为什么 whenLoaded() 可以采用 closure() 来避免加载关系,除非它们实际上已加载。此方法将在满足 whenLoaded() 条件后首先评估闭包。

    $this->whenLoaded('meta', function () { return $this->meta->discount ?? 0; });

    Antwort
    0
  • StornierenAntwort