@maksutka777

Как вытащить из одной таблицы mysql данные строки другой таблицы через внешний ключ?

Пытаюсь делать проект на laravel 10. В базе есть две таблицы - categories и posts. В таблице posts есть внешний ключ category_id. В таблице categories есть столбец url. Мне нужно вывести список постов так, чтобы напротив названия вывелись еще и данные из столбца url таблицы categories (в соответствии с category_id).

Согласно документации laravel в модель Post я добавил отношения к модели Category оп типу один к одному:
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Post extends Model
{
    public function category(): BelongsTo
    {
        return $this->belongsTo(Category::class);
    }

Далее у меня ступор)) Я не знаю что писать в контроллер, который запускается когда "активируется" путь.

ЧатГПТ предлагает это:
public function index()
{
    $posts = Post::with('category')->get(['id', 'name']);
    return view('manager.posts.index', compact('posts'));
}

Но сдается мне что это какая-то устаревшая комбинация. Плюс ко всему я не знаю что в самом шаблоне вывести чтобы показать url...
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
@Dastan_UI
public function index()
{
    $posts = Post::with('category')->get(['id', 'name', 'category_id']);
    return view('manager.posts.index', ['posts' => $posts]);
}

// для получения данных из коллекции $posts - используйте foreach, для получения категории - $posts[0]->category->url ; $posts[0] - риск ошибки, когда posts пустой
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы