gpt4 book ai didi

拉拉维尔。如何获得外键是数组的关系

转载 作者:行者123 更新时间:2023-12-05 06:36:31 24 4
gpt4 key购买 nike

我正在尝试检索数据库行及其关系。但是,本地键是一个数组。让我用一个例子来解释。

假设我有一张国家表格和一张网页表格。每个国家可以有很多页面。每个页面可以属于多个国家。我没有更改此模式的灵 active 。

pages
+-------------+-----------+
| id | name | countries |
+-------------+-----------+
| 1 | Page 1 | 1 |
+-------------+-----------+
| 2 | Page 2 | 1,2,3 |
+-------------+-----------+
| 3 | Page 3 | 4,5,6 |
+-------------+-----------+

countries
+----+----------------+
| id | name |
+----+----------------+
| 1 | United States |
+----+----------------+
| 2 | United Kingdom |
+----+----------------+
| 3 | Germany |
+----+----------------+
| 4 | France |
+----+----------------+
| 5 | Hong Kong |
+----+----------------+
| 6 | Thailand |
+----+----------------+
| 7 | Belgium |
+----+----------------+
| 8 | Singapore |
+----+----------------+

我的模型和 Controller 看起来像这样:

country 

public function pages()
{
return $this->hasMany(Page::class, 'id', 'countries');
}

MemberController.php

$countries = Country::with('pages')->get();

这将返回所有国家,但只有第 1 页包含任何关系。

有没有办法使用 whereIn 方法检索关系,以便所有三个国家/地区都返回适当的页面?

提前致谢

最佳答案

由于 Page 可以属于许多 Countries,您需要创建一个名为 country_page 的数据透视表并删除 countries列。

然后定义两个belongsToMany()两种模型中的关系:

public function pages()
{
return $this->belongsToMany(Page::class);
}

如果你是 not following Laravel naming conventions在我的 repo 中列出并且你给了 pivot 名称一个自定义名称,也定义它:

public function pages()
{
return $this->belongsToMany(Page::class, 'custom_pivot_table');
}

关于拉拉维尔。如何获得外键是数组的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49048041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com