Ela*_*ley 2 laravel eloquent laravel-4
在之前的一个问题中(以雄辩的方式获取外键的名称)我在Laravel 4中询问了一对多与雄辩的关系,但是当我进入一个更复杂的Schema时,我开始越来越混淆它是怎么回事正确的方法.我想我可以简单地模仿常规的SQL查询,但我想以正确的方式做到这一点,使用模型和我用laravel和eloquent的所有工具.
所以这些是我的表(其中一些)
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 |
+------------+------------------+
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,单位与军队和单位类型有1-n的关系.我想要实现的是,当我在视图中列出我的单位时,我没有显示军队和单位类型的ID,而是显示实际名称(可能还有一些其他信息将来会添加到这些表中,我是现在做基础知识).
您可以在之前发布的链接中看到我使用"hasMany"或"belongsTo"方法设置我的模型,这就是我如何查询以显示我不知道该怎么做的数据.
我想我对你上一个问题的回答也会回答这个问题.你不需要第三张桌子.在您的单位表中,最后一个字段的名称应为army_id
编辑
好吧,似乎你想将unittypes表与单位表联系起来.您在Units表上的外键是type,因此:
单位型号:
class Unit extends Eloquent
{
public function army()
{
return $this->belongsTo('Army');
}
public function unittype()
{
return $this->belongsTo('Unittype', 'type');
}
}
Run Code Online (Sandbox Code Playgroud)
单元类型模型应如下所示:
class Unittype extends Eloquent
{
public function units()
{
return $this->hasMany('Unit', 'type');
}
}
Run Code Online (Sandbox Code Playgroud)
军队模型
class Army extends Eloquent
{
public function units()
{
return $this->hasMany('Unit');
}
}
Run Code Online (Sandbox Code Playgroud)
你的问题确实是急于加载嵌套关系.所以,您的控制器(或路线)应该:
$armies = Army::with('units.unittype')->get();
Run Code Online (Sandbox Code Playgroud)
最后,你的观点
<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>
Run Code Online (Sandbox Code Playgroud)
免责声明:我会亲自合并单位和单位类型表,因为它无缘无故地复杂化了(根据给出的信息).另外,请参阅您之前的问题和我的答案,以便充分了解正在发生的事情.
| 归档时间: |
|
| 查看次数: |
4003 次 |
| 最近记录: |