unknown
unknown

Reputation: 193

retrieve name from the other table

Is there an efficient way of retrieving the name by using select and join clause? I have a Note, NoteType and NoteStatus model. There are type and status field which will be stored as integer (representing the id of its respective model) inside Note model. NoteType and NoteStatus models have id and name fields.

foreach($notes as $note)
{
    $type=NoteType::where('id',$note->type)->first();
    $note->type=$type->name;
    $status=NoteStatus::where('id',$note->status)->first();
    $note->status=$status->name;
}

Upvotes: 0

Views: 56

Answers (2)

bhavinjr
bhavinjr

Reputation: 1763

Assume that Your model name is Note.php

assume in your notes table has note_status_id and note_type_id foreign key

Add Relationship in your main model Note.php

public function status()
{
    return $this->belongsTo(NoteStatus::class);
}

public function notes()
{
    return $this->belongsTo(NoteType::class);
}

You can retrieve data with relationship something like that

Note::with('status','notes')
     ->get()

For more info regarding laravel relationship Laravel Eloquent: Relationships

Upvotes: 1

Petay87
Petay87

Reputation: 1773

Model Relations

Setting up relations between your models would be the best way as you then don't need to re-invent the wheel each time you need to call the join. It will save you code in the long run.

More info on this here:

Laravel Eloquent Relationships

Query Builder

If you want to do this manually then it would be the same as if you ran the query in raw SQL:

$note = Note::join('NoteType','Note.NoteType_id','NoteType.id')
->select('Note.*','NoteType.Name as NoteName')
->first();

Now you can get all the info from $note

Note id = $note->id
NoteType Name = $note->NoteName

Obviously adjust this to your code but this should help you build your knowledge enough to work it out.

More info can be found here:

Laravel Query Builder Joins

Upvotes: 1

Related Questions