skip to Main Content

I am trying to create an offers forum, where some user can create their offers in order to provide their services and I want to show the name of the person that created that offer instead of the id.

In my database I have the two tables:

  • Offers table:
    Offers table

  • User table:

Users table

In offers I have a column of the professor_id, that is related to the id of users table.

This is what i have in my controller to show the offers:

public function ofertes(){

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

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

and in the blade.php I have that code:

@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

and that is what is shown:
ofertes.blade.php

Where it says nom, how I can show the name instead of the id?

Thank you!

3

Answers


  1. If you have specified the relationship to professor in your Oferta model you can use the following code:

    public function ofertes(){
    
        $ofertes = Oferta::with('professor')->latest()->get();
    
        return view('create.ofertes')->with(compact('ofertes'));
    }
    

    Your blade:

    @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
    

    If you haven’t specified the relation you should add the following method to your Oferta model (you might need to tweak this a little bit based on your namespaces):

    public function professor()
    {
        return $this->belongsTo(User::class);
    }
    
    Login or Signup to reply.
  2. Join two table like

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

    Then in place of {{$oferta->professor_id}}, replace {{$oferta->nom}}

    Your problem should be solved

    Login or Signup to reply.
  3. Very easy

    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>
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search