首页 文章

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

提问于
浏览
0

这个问题与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 回答

  • 1

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

  • 1

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

相关问题