gpt4 book ai didi

laravel - 如何使用 Eloquent ORM 将一张表与其他表关联起来

转载 作者:行者123 更新时间:2023-12-02 13:56:51 26 4
gpt4 key购买 nike

在上一个问题( Getting the name of the foreign key with eloquent )中,我询问了 Laravel 4 中与 eloquent 的一对多关系,但是当我进入一个更复杂的 Schema 时,我开始越来越困惑如何以正确的方式做到这一点。我想我可以简单地模仿常规 SQL 查询,但我想以正确的方式做到这一点,使用 Laravel 和 eloquent 的模型和所有工具。

这些是我的 table (其中一些)

    Units
+------------+------------------+
| Field | Type |
+------------+------------------+
| id | int(10) unsigned |
| name | varchar(255) |
| type | int(11) |
| created_at | timestamp |
| updated_at | timestamp |
| value | int(11) |
| army | int(11) |
+------------+------------------+

Armies
+------------+------------------+
| Field | Type |
+------------+------------------+
| id | int(10) unsigned |
| name | varchar(255) |
| created_at | timestamp |
| updated_at | timestamp |
| color | varchar(255) |
+------------+------------------+

Unittypes
+------------+------------------+
| Field | Type |
+------------+------------------+
| id | int(10) unsigned |
| name | varchar(255) |
| created_at | timestamp |
| updated_at | timestamp |
+------------+------------------+

如您所见,单位与军队和单位类型具有 1-n 关系。我想要实现的是,当我在 View 上列出我的单位时,我显示的不是军队的 ID 和单位类型,而是实际的名称(也许将来会添加到这些表中的一些其他信息,我是目前正在做基础工作)。

您可以在之前发布的链接中看到,我已经使用“hasMany”或“belongsTo”方法设置了模型,这就是我如何进行查询以显示我不知道该怎么做的数据。

最佳答案

我想我对你上一个问题的回答也能回答这个问题。你不需要第三张 table 。在您的单位表中,最后一个字段的名称应为 army_id

编辑

好的,您似乎想要将 unittypes 表与 units 表关联起来。 Units 表上的外键是 type,因此:

单位型号:

class Unit extends Eloquent 
{

public function army()
{
return $this->belongsTo('Army');
}

public function unittype()
{
return $this->belongsTo('Unittype', 'type');
}
}

单元类型模型应如下所示:

class Unittype extends Eloquent 
{
public function units()
{
return $this->hasMany('Unit', 'type');
}
}

陆军模型

class Army extends Eloquent 
{
public function units()
{
return $this->hasMany('Unit');
}

}

您的问题确实是急切加载嵌套关系。因此,您的 Controller (或路线)应该执行以下操作:

$armies = Army::with('units.unittype')->get();

最后,您的 View

            <ul>
@foreach($armies as $army)
<li>{{$army->name}}
<ul>
@foreach($army->units as $aunit)
<li>
<b>{{ $aunit->name }}</b> which belongs to <b>{{ $aunit->unittype->name }}</b>
</li>
@endforeach
</ul>
</li>
@endforeach
</ul>

免责声明:我个人会合并单位和单位类型表,因为它无缘无故地使事情变得复杂(根据给出的信息)。另请参阅your previous question and my answer以便充分了解正在发生的事情。

关于laravel - 如何使用 Eloquent ORM 将一张表与其他表关联起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16943446/

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