【问题标题】:Getting database information in Laravel Blade Template with Inner Join使用内连接在 Laravel Blade 模板中获取数据库信息
【发布时间】:2013-06-03 10:17:37
【问题描述】:

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

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

  • 身份证
  • 名字
  • 姓氏
  • 地址
  • yadayada

地址

  • id
  • 第一行
  • 城市
  • 状态
  • 压缩包
  • yadayada

有一个“人”,它可以有一个地址。我之所以这样拆分,是因为公司(此应用程序的另一部分)也将有地址,以及会面地点和 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”是一般的良好数据库习惯吗?在这种情况下,我可以重命名并且问题将得到解决

感谢您的帮助。

【问题讨论】:

  • 附注:Eloquent 会让您在这里的生活更轻松。
  • @Mike-Anthony 我对 Laravel 很陌生,但我认为我正在使用 eloquent。这是我的控制器'代码' $people = DB::table('people') ->join('address', 'address.address_id', '=', 'people.address') ->get();返回视图::make('people.index') ->with('people', $people); '/代码'

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


【解决方案1】:

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

【讨论】:

  • 我最终查看了一些其他资源,他们建议我有两个字段:address_id 映射到字段 address 和 people_id 映射到字段 people。有点烦人,但我认为数据库设计更好。
【解决方案2】:

对于我在 DB 设计和连接子句中看到的内容,people 表 (people.address) 的 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();

【讨论】:

  • 这不起作用。但我最终重命名了这些列,以便我可以使用映射到“地址”列的“address_id”。我没有尝试左连接,尽管它可能会更好。我将不得不稍微研究一下连接——对我来说这是 MySQL 的可怕部分,因为我还没有牢牢掌握它们。
  • 你可以看看这个codinghorror.com/blog/2007/10/…
猜你喜欢
  • 1970-01-01
  • 2022-12-04
  • 2021-02-12
  • 2020-05-14
  • 2014-01-21
  • 1970-01-01
  • 2019-10-17
  • 1970-01-01
  • 2017-01-26
相关资源
最近更新 更多