gpt4 book ai didi

php - Laravel 表与数据透视表的关系

转载 作者:行者123 更新时间:2023-12-02 03:54:33 25 4
gpt4 key购买 nike

我对如何使用连接到数据透视表的表在 Laravel 中设置模型感到困惑。

问题来了

说我有

Locations
id
name

area_types
id
name

area_type_location (Pivot table)
id
location_id
area_type_id

area_test
id
area_type_location_id
clean
headCount

表之间的关系是不同的区域类型属于不同的位置。即:海滩、25m 泳池、 child 泳池、烧烤等

area_test 连接到数据透视表,因为测试必须从存在的区域生成,在本例中,它是在不同位置注册的区域。因此必须每天进行测试、测量等。

我了解area_types和多对多关系的位置之间的结构,但是我无法理解如何构建area_test模型?如何从位置表获取数据 -> 我的测试在哪里?

我应该为我的数据透视表创建一个模型吗?这是 Laravel 中的一个好习惯吗?

有人有相同的用例吗?

我读到关于 Eloquent 文章 has many through 关系,但我知道它没有提到通过数据透视表。我不太明白我的用例是否相同。

谢谢

最佳答案

最后,显然有几种方法可以将数据从 locations 表获取到 area_tests

尝试过tinker,它有效,

<小时/>

第一个选项

我需要为我的数据透视表创建一个数据透视模型:

class LocationAreaType extends Pivot{

public function location(){
return $this->belongsTo(Location::class);
}

public function areaType(){
return $this->belongsTo(AreaType::class);
}

public function AreaTests(){
return $this->hasMany(AreaTest::class, 'area_type_location_id');
}

}

我可以使用需要在位置表中创建的 hasManyThrough 关系

public function areaTests()
{
return $this->hasManyThrough(
AreaTest::class,
LocationAreaType::class,
'location_id',
'area_type_location_id');
}

这样我就可以通过$location->areaTests轻松获得areaTests,我的问题不是将area_type_location_id确定为外国。您需要确定这一点,显然当我扩展枢纽并使用 hasMany laravel 时,它本身不会自动识别外键。

<小时/>

第二个选项

访问它的另一种方法是从关系表中,我可以在 areaTypes() 关系中定义 withPivot,然后像这样访问它:

$location->areaType[0]->pivot->areaTests

由于 Laravel 只能识别表 location_idarea_type_id 中的外键,因此我必须包含数据透视表的 id 才能获取AreaTest表数据

所以在位置模型中我必须获取该列

public function areaTypes()
{
// Get the ID of the pivot table to get the poolTests table (connected with ID column)
return $this->belongsToMany(AreaType::class)
->using(AreaTypeLocation::class)
->withPivot('id');
}

关于php - Laravel 表与数据透视表的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60256793/

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