Обновление
Как заметил Тим Льюис:
отношения нельзя назвать 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. Это ускорило бы выполнение запроса, потому что первичные идентификаторы индексируются по умолчанию.