这个问题与Laravel有关,也与一般的数据库设计有关,因为我对两者都是新手 .
我创建了一个这样的数据库:
人
-
id
-
名字
-
姓氏
-
address
-
yadayada
地址
-
id
-
line1
-
city
-
州
-
zip
-
yadayada
有一个“人”,它可以有一个地址 . 我这样拆分是因为公司(这个应用程序的另一部分)也会有地址,以及会场和POI也会有地址 . 我正在构建一个CRM类型的系统 . 现在,我需要从数据库中检索信息 . 但是有一个问题,因为有两列名为“id” .
我的内部联接如下 . 它的工作原理:$ people = DB :: table('people') - > join('address','address.id','=','people.address') - > get();
return View::make('people.index')
->with('people', $people);
但是当我转到我的Laravel Blade模板时,一切正常,内部连接成功并显示数据,但我需要创建一个Resourceful Controller链接,该链接链接到ID,以便可以在自己的页面上查看:
@foreach ($people as $people)
<li>
<a href="{{ URL::to('people/' . $people->id) }}" class="thumbnail">
<img src="" />
</a>
<div class="caption">
<p>
{{ $people->firstname }}
{{ $people->lastname }}
{{ $people->line1 }}
{{ $people->city }}
</p>
</li>
@endforeach
哪个返回非常疯狂的结果,因为它不知道使用哪个“id” . (它使用地址表的id与奇怪的结果)
- 有没有办法在Laravel中指定表名? (这不起作用):
<a href="{{ URL::to('people/' . $people->people.id) }}" class="thumbnail">
<img src="" />
</a>
- 或者是不是在两个不同的表中使用“id”一般的数据库实践?在这种情况下,我可以重命名,问题将得到解决
谢谢您的帮助 .
2 回答
您始终可以重命名id字段,但这不是必需的 . 您可以使用SELECT查询指定列 . 例如,SELECT address.id为address_id,people.id为people_id . 此方法的缺点是您需要指定每个列名称 .
对于我在DB设计和连接子句中可以看到的内容,
people
table(people.address
)的address
列保存address
表的ID .如果是这样,您可以在Blade视图中使用
people.address
,如下所示:此外,在这种情况下使用
leftJoin
可能更好: