【发布时间】:2018-12-20 13:52:11
【问题描述】:
我基本上有两个相同类型的模型(dog 和 cat):pets。 pets 表连接了数据库中的所有狗和猫。现在我希望能够通过 PetController 中的宠物 id 找到特定的宠物。像这样:
$pet = Pet::findOrFail($id); // returns a dog or cat
表格结构:
┌──────────────┐ ┌───────────┐ ┌───────────┐
│ pets │ │ dogs │ │ cats │
├──────────────┤ ├───────────┤ ├───────────┤
│ id │ │ id │ │ id │
│ related_type │ │ name │ │ name │
│ related_id │ │ eye_color │ │ tail_size │
└──────────────┘ └───────────┘ └───────────┘
宠物桌:
┌────┬──────────────┬────────────┐
│ id │ related_type │ related_id │
├────┼──────────────┼────────────┤
│ 1 │ dog │ 1 │
├────┼──────────────┼────────────┤
│ 2 │ dog │ 2 │
├────┼──────────────┼────────────┤
│ 3 │ cat │ 1 │
└────┴──────────────┴────────────┘
我搜索了 Laravel 文档,但似乎没有一个关系适合这个问题。只有多态关系才能反过来工作,这样我就可以通过 dog-或 cat-id 访问宠物模型。但我正在寻找一种相反的解决方案。有什么关系不需要手动在 PetController 中使用讨厌的 if-else 吗?
谢谢!
【问题讨论】:
-
您需要查找具有 1 个 id 的狗和猫(例如)??
-
不,即我想找到宠物 ID 为 3 的任何类型的宠物(返回 id 为 1 的猫)
-
Pet::where('related_id', $id)->first(), no?
-
我正在寻找将猫或狗与宠物条目连接起来的任何类型的关系。由于它们的类型不同,我不能简单地使用外键。
-
我理解你 =) 结果应该是什么?)
标签: php laravel eloquent relationship polymorphic-associations