使用内部联接在Laravel刀片模板中获取数据库信息

时间:2013-06-03 00:37:30

标签: database-design data-binding laravel laravel-4

这个问题与Laravel有关,但也与一般的数据库设计有关,因为我是两者都不熟悉。

我创建了一个类似这样的数据库:

  • ID
  • 姓名
  • 名字
  • 地址
  • yadayada

地址

  • ID
  • LINE1
  • 城市
  • 状态
  • 拉链
  • yadayada

有一个“人”,它可以有一个地址。我这样拆分是因为公司(这个应用程序的另一部分)也会有地址,以及会场和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和奇怪的结果)

  1. 有没有办法在Laravel中指定表名? (这不起作用):

        <a href="{{ URL::to('people/' . $people->people.id) }}" class="thumbnail">
            <img src="" />
        </a>
    
  2. 或者,在两个不同的表中不使用“id”是一般的良好数据库实践吗?在这种情况下,我可以重命名,问题将得到解决

  3. 感谢您的帮助。

2 个答案:

答案 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();