получить имя из другой таблицы - PullRequest
0 голосов
/ 17 января 2019

Существует ли эффективный способ получения имени с помощью предложений select и join? У меня есть модели Note, NoteType и NoteStatus. Есть поле типа и статуса, которое будет храниться как целое число (представляющее идентификатор соответствующей модели) внутри модели Note. Модели NoteType и NoteStatus имеют поля id и name.

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 голосов
/ 17 января 2019

Предположим, что ваша модель называется Note.php

предположим, что в вашей таблице notes есть note_status_id и note_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: Отношения

0 голосов
/ 17 января 2019

Модель отношений

Настройка отношений между вашими моделями была бы наилучшим способом, так как вам не нужно заново изобретать колесо каждый раз, когда вам нужно вызвать соединение. Это сохранит ваш код в долгосрочной перспективе.

Подробнее об этом здесь:

Laravel Eloquent Relationship

Query Builder

Если вы хотите сделать это вручную, то это будет так же, как если бы вы выполняли запрос в необработанном 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

...