从另一个表中检索名称

时间:2019-01-17 07:43:51

标签: database laravel laravel-query-builder

是否存在使用select和join子句检索名称的有效方法?我有一个Note,NoteType和NoteStatus模型。 Note模型中有类型和状态字段,它们将存储为整数(代表其各自模型的ID)。 NoteType和NoteStatus模型具有ID和名称字段。

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;
}

2 个答案:

答案 0 :(得分:1)

模型关系

在模型之间建立关系将是最好的方法,因为您无需在每次需要调用联接时都重新发明轮子。从长远来看,它将节省您的代码。

有关此的更多信息:

Laravel Eloquent Relationships

查询生成器

如果要手动执行此操作,则与在原始SQL中运行查询相同:

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

现在您可以从$ note中获取所有信息

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

显然可以根据您的代码进行调整,但这应该可以帮助您建立足够的知识以进行实践。

更多信息可以在这里找到:

Laravel Query Builder Joins

答案 1 :(得分:1)

假设您的型号名称为Note.php

假设您的notes表中有note_status_idnote_type_id外键

在主模型Note.php中添加关系

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

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

您可以检索具有类似关系的数据

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

有关laravel关系Laravel Eloquent: Relationships的更多信息