Modellvererbung in Laravel
P粉990008428
P粉990008428 2024-01-10 17:16:44
0
1
366

Angenommen, ich habe die folgende Klasse:

  • Tiere
  • Hund
  • Golden Retriever
  • Dackel

Ich möchte Animal als Basisklasse, Dog als Unterklasse von Animal und die anderen beiden als Unterklassen von Dog.

Was sind die Best Practices in Laravel? Vier Modelle und vier separate Tabellen erstellen? Oder erstellen Sie zwei Tische, einen für Tiere und einen für Hunde.

Außerdem könnte ich, wenn jedes Tier eine „makeSound“-Funktion hätte, diese über eine Schnittstelle implementieren und dann davon ausgehen, dass der Hund bellen würde, aber verschiedene Hunderassen könnten einige Überschreibungen haben, die sie dazu bringen, etwas etwas anderes zu tun. Was mich verwirrt, ist: Wie verstehe ich, was ein Golden Retriever ist?

Wenn es nur ein Tier wäre, könnte ich das tun

$animals = Animal::get();

Aber ich bin mir nicht sicher, wie:

$daschunds = Daschund::get();

Für Ratschläge/Lesematerial zu diesem Thema wären wir sehr dankbar. Ich habe einige Kenntnisse in objektorientierter Programmierung, aber nicht viel in der Laravel-Umgebung. Ich habe einige Artikel gelesen, aber nichts Spezielles zu Laravel.

P粉990008428
P粉990008428

Antworte allen(1)
P粉648469285

由于所有计划中的模型都是动物,所以你应该肯定有一个动物表和一个动物模型。

现在,如果你更具体的模型与一般的动物有不同的行为,那么你可以继承模型,这样它们的方法就能正确处理事情。也就是说,如果你的差异只在于PHP,那么你可以让模型相互继承,引用相同的表,并且你的应用程序会根据某些标准来判断何时以及如何与不同的模型进行操作。

如果你的数据库也有差异,也就是说,在狗的情况下,你需要额外的信息,那么你可以为狗建立一个属性表,该表有一个指向动物表的外键。

最后,你可以决定为每个模型使用不同的表,这种情况下,最好实现一个抽象动物类,并让更具体的动物模型类以自己的方式扩展它,这样你就可以将共同的内容实现到抽象动物类中。

至于上述哪种方式更好,这在很大程度上取决于你的具体情况。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage