【发布时间】:2019-06-19 20:41:59
【问题描述】:
假设我有以下数据库架构:
dogs 和owners 与经典belongsToMany 连接。 walks 表怎么样?我希望能够在这种关系中使用 Eloquent 的好东西:
$dogs = Dog::with('walks')->get();
$walks = Walk::with('dogs')->get();
理论上,我可以将dog_owner_id 替换为两个单独的列:dog_id 和owner_id。这将使 Eloquent 的使用变得容易,但我会失去一些数据完整性,因为不相关的 Dog 和 Owner 可能会去散步(这对两者都不安全!)。
在Walk.php中,应该如何定义关系?
public function dog() {
// return ???;
}
Dog.php 和 Owner.php 怎么样?
public function walks() {
// return ???;
}
【问题讨论】:
-
我相信您正在寻找HasManyThrough。我可能已经离开了,因为我已经有一段时间没有做任何与 laravel 相关的事情了。
-
我认为 hasManyThrough 对 Dog.php 和 Owner.php 有效,但不确定 Walk.php。
-
我想你可以只使用老式的连接,如果没有别的。看看here
-
我在这篇文章中也有类似的经历:stackoverflow.com/questions/44720436/… 但我相信 eloquent 没有什么标准可以解决这个问题。如果它存在的话,我很想看到这样的东西。
-
如果这是你的真实结构,那么
walks与数据透视表相关似乎很奇怪。它是某种数据透视表 -owner + dog = walk,不是吗?
标签: php laravel laravel-5 eloquent