【问题标题】:How to get the username through an id in Laravel?如何通过 Laravel 中的 id 获取用户名?
【发布时间】:2019-08-22 16:58:18
【问题描述】:

我正在尝试创建一个优惠论坛,一些用户可以在其中创建他们的优惠以提供他们的服务,我想显示创建该优惠的人的姓名而不是 ID。

在我的数据库中,我有两个表:

  • 报价表:

  • 用户表:

在 offer 中,我有一列professor_id,它与用户表的 id 相关。

这是我在控制器中显示优惠的内容:

public function ofertes(){

    $ofertes = Oferta::all()->sortByDesc('id');

    return view('create.ofertes')->with(compact('ofertes'));
}

在 Blade.php 中我有那个代码:

@foreach($ofertes as $oferta)
    <tr>
        <td>Nom : {{$oferta->professor_id}}</td> <br>
        <td>Títol : {{$oferta->titol}}</td> <br>
        <td>Descripció: {{$oferta->descripcio}}</td> <br>
        <td>Data: {{$oferta->created_at}}</td> <br><br>
    </tr>
@endforeach

这就是显示的内容:

在哪里显示 nom,我如何显示名称而不是 id?

谢谢!

【问题讨论】:

  • 你试过把 $oferta->professor_id 改成 $oferta->nom
  • 嘿!是的,我试过了,但问题是 nom 来自另一个表,问题是我不知道如何得到它
  • 然后看看在 laravel 中加入表格,我目前在手机上,帮不了你
  • 用户表截图中的那些邮箱地址是真的还是假的?如果它们是真实的:请删除屏幕截图,因为您正在暴露它们并可能违反 GDPR。
  • 没有问题,完全是假的

标签: php laravel phpmyadmin


【解决方案1】:

如果您在 Oferta 模型中指定了与 professor 的关系,则可以使用以下代码:

public function ofertes(){

    $ofertes = Oferta::with('professor')->latest()->get();

    return view('create.ofertes')->with(compact('ofertes'));
}

你的刀片:

@foreach($ofertes as $oferta)
    <tr>
        <td>Nom : {{$oferta->professor->nom}}</td> <br>
        <td>Títol : {{$oferta->titol}}</td> <br>
        <td>Descripció: {{$oferta->descripcio}}</td> <br>
        <td>Data: {{$oferta->created_at}}</td> <br><br>
    </tr>
@endforeach

如果您没有指定关系,您应该将以下方法添加到您的 Oferta 模型(您可能需要根据您的命名空间稍微调整一下):

public function professor()
{
    return $this->belongsTo(User::class);
}

【讨论】:

  • 很高兴听到,我很高兴它帮助了你!您可以选择此答案作为您的问题的解决方案,这样将来它甚至可以帮助其他人。
【解决方案2】:

像这样加入两个表

$oferta = DB::table('users')
        ->join('offers','users.id','=','offers.professor_id')
        ->select('offers.*','users.nom')
        ->orderby('offers.id','DESC')->get();

然后替换{{$oferta-&gt;professor_id}},替换{{$oferta-&gt;nom}}

你的问题应该解决了

【讨论】:

  • 在这种情况下最好使用 eloquent,因为 eloquent 会返回一个带有教授模型的用户模型,这在 MVC 框架中是更好的做法
  • 没关系,我们只需要数组或对象。
  • 你认为 DB::query 设置为官员喜欢只是出现??
  • 你的回答会起作用,但使用 eloquent 是正确的方法,这就是我要说的全部
  • 它稍微快一点,但雄辩的方法更好,imo 更一致,更符合 laravel /OOP 约定(也更具可读性和灵活性),我也不认为这里的性能很重要。
【解决方案3】:

很简单

public function ofertes(){

    $ofertes = Oferta::with('professor')->latest()->get();
    $users = User::all();

    return view('create.ofertes')->with(compact('ofertes', 'users'));
}

In blade file:

<td>Nom : @foreach ($users as $user)
           @if ($oferta->professor_id === $user->id) $user->nom $user->cognom
           @endif
          @endforeach
</td><br>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 2021-03-06
    • 2019-03-28
    • 2016-10-03
    • 1970-01-01
    相关资源
    最近更新 更多