这个问题与Laravel有关,但也与一般的数据库设计有关,因为我是两者都不熟悉。
我创建了一个类似这样的数据库:
人
地址
有一个“人”,它可以有一个地址。我这样拆分是因为公司(这个应用程序的另一部分)也会有地址,以及会场和POI也会有地址。我正在构建一个CRM类型的系统。现在,我需要从数据库中检索信息。但是有一个问题,因为有两列名为“id”。
我的内部联接如下。它有效: $ people = DB :: table('people') - > join('address','address.id','=','people.address') - >得到();
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 }}<br />
{{ $people->lastname }}<br />
{{ $people->line1 }}<br />
{{ $people->city }}<br /><br />
</p>
</li>
@endforeach
返回非常疯狂的结果,因为它不知道使用哪个“id”。 (它使用地址表的id和奇怪的结果)
有没有办法在Laravel中指定表名? (这不起作用):
<a href="{{ URL::to('people/' . $people->people.id) }}" class="thumbnail">
<img src="" />
</a>
或者,在两个不同的表中不使用“id”是一般的良好数据库实践吗?在这种情况下,我可以重命名,问题将得到解决
感谢您的帮助。
答案 0 :(得分:1)
您始终可以重命名ID字段,但这不是必需的。您可以使用SELECT查询指定列。例如,SELECT address.id为address_id,people.id为people_id。此方法的缺点是您需要指定每个列名称。
答案 1 :(得分:1)
对于我在DB设计和连接子句中可以看到的内容,address
表(people
)的people.address
列包含address
表的ID。
如果是这样,您可以在Blade视图中使用people.address
,如下所示:
<a href="{{ URL::to('people/' . $people->address) }}" class="thumbnail">
此外,在这种情况下使用leftJoin
可能更好:
$people = DB::table('people') ->leftJoin('address', 'address.id', '=', 'people.address') ->get();