0

这个问题与 Laravel 有关,但也与一般数据库设计有关,因为我对两者都是新手。

我做了一个这样的数据库:

人们

  • ID
  • 地址
  • 亚达达

地址

  • ID
  • 第1行
  • 城市
  • 状态
  • 压缩
  • 亚达达

有一个“人”,它可以有一个地址。我之所以这样拆分,是因为公司(此应用程序的另一部分)也将有地址,以及会面地点和 POI 也将有地址。我正在构建一个 CRM 类型的系统。现在,我需要从数据库中检索信息。但是有一个问题,因为有 2 列名为“id”。

我的内部连接如下。它有效: $people = DB::table('people') ->join('address', 'address.id', '=', 'people.address') ->get();

        return View::make('people.index')
            ->with('people', $people);  

但是当我转到我的 Laravel Blade 模板时,一切正常,Inner Join 成功并显示数据,但我需要创建一个 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”是一般的良好数据库实践吗?在这种情况下,我可以重命名并且问题将得到解决

谢谢您的帮助。

4

2 回答 2

1

您始终可以重命名 id 字段,但这不是必需的。您可以使用 SELECT 查询指定列。例如,选择 address.id 作为 address_id,将 people.id 作为 people_id。此方法的缺点是您需要指定每个列名。

于 2013-06-03T00:45:12.750 回答
1

对于我在 DB 设计和连接子句中看到的内容,表 ( ) 的address列包含表的 ID 。peoplepeople.addressaddress

如果是这样,您可以people.address在 Blade 视图中使用,如下所示:

            <a href="{{ URL::to('people/' . $people->address) }}" class="thumbnail">

leftJoin此外,在这种情况下使用可能会更好:

 $people = DB::table('people') ->leftJoin('address', 'address.id', '=', 'people.address') ->get();
于 2013-06-03T02:17:37.560 回答