Получить имя вместо ID один к одному - PullRequest
0 голосов
/ 07 июня 2019

У меня есть таблица make и таблица post.Make сохранения таблиц делают имена как make_code и make_name.Стол сообщений имеет столбец make.При сохранении поста, он будет сохранять make в make_code.

При отображении в блейде, я хочу, чтобы он отображался как make_name.Как я могу это сделать?

В настоящее время {{$post->make}} дает мне make_code.Мне нужно, чтобы это показывало make_name.

Я думаю, что это отношения один к одному, которые необходимы.Я попытался положить его в модель, но не получилось.Как мне этого добиться?

СДЕЛАТЬ МОДЕЛЬ

 class Make extends Model
    {
        public function make()
        {
            return $this->belongsTo(App\Post::class);
        }
    }

ПОЧТОВАЯ МОДЕЛЬ:

class Post extends Model
{
    protected $table = 'posts';
}

POSTS TABLE SCREENSHOT

MAKE TABLE SCREENSHOT

1 Ответ

1 голос
/ 07 июня 2019

Обновление

Как заметил Тим Льюис:

отношения нельзя назвать make, поскольку это конфликт.

Предполагая, что ваши отношения работают так:

  • a Make имеет много Post
  • a Post принадлежит объекту Make.

| Примечание: поправьте меня, если я ошибаюсь.

Итак, если это правильно, вы должны определить свои отношения следующим образом:

Post.php

public function make_rel()
{
    return $this->belongsTo(Make::class, 'make', 'make_code');
}

Make.php

public function posts()
{
    return $this->hasMany(Post::class, 'make', 'make_code');
}

Проверьте разделы Один-ко-многим и Один-ко-многим (Обратный) документации.

Итак, вы можете сделать в своем контроллере (или где хотите):

$post = Post::find(1);
dd($post->make_rel->make_name); // 'Harley Davidson'

Кроме того, вы можете создать вычисленное свойство в качестве сокращения, чтобы получить доступ к этому связанному свойству в вашей модели Post:

Post.php

// ...

public function getMakeNameAttribute()
{
    return $this->make_rel->make_name;
}

Теперь вы можете получить к нему доступ следующим образом:

$post = Post::find(1);
dd($post->make_name); // 'Harley Davidson'

Предложение

В качестве рекомендации я настоятельно рекомендую вам изменить столбец внешнего ключа с make на make_id (в таблице «сообщений»), чтобы избежать конфликтов. Кроме того, вы можете связать сообщение с ключом make primmary вместо пользовательского ключа, учитывая тот факт, что эта ссылка почти невидима и обрабатывается Laravel. Это ускорило бы выполнение запроса, потому что первичные идентификаторы индексируются по умолчанию.

...