@sosis04ka
Веб-программист

Как вывести категорию поста в laravel?

Как на главной странице, где выводяться потсы вывести категорию каждого поста.
Код PostController:
<?php

namespace App\Http\Controllers\Posts;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Post;

class PostController extends Controller
{
    public function index()
    {
    	$posts = Post::orderBy('updated_at', 'desc')->where('status', 1)->get();
        $categories = \App\Category::categoryAll();
    	return view('posts.index', compact('posts', 'categories'));
    }

    public function view($id)
    {
    	$post = Post::where('status', 1)->find($id);
    	$data = [
    		'post' => $post,
    	];
    	return view('posts.view', $data);
    }
}

Код модели Post и Category:
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    public function post()
    {
    	return $this->hasMany('App\Post', 'category_id');
    }

    public static function categoryAll()
    {
    	return Category::get();
    }
}

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    public function category()
    {
    	return $this->hasOne('App\Category', 'id');
    }

    public static function latestPost()
    {
    	return Post::orderBy('updated_at', 'desc')->where('status', 1)->limit(5)->get();
    }
}

index.balde.php:
@extends('layouts.app')

@section('content')
<section class="posts">
        <div class="jumborton">
            <h1>Блог<span>.</span></h1>
        </div>
@if (count($posts) > 0)
@foreach ($posts as $post)
        <article class="post">
            <div class="post-img"><a href="#"><img src="{{ asset('assets/img/' . $post->img) }}"></a></div>
            <div class="post-text">
                <h2>{{ $post->title }}</h2>
                <p class="post-text-information"><span>Категория:</span> <a href="#">{{ $post->category->title }}</a>  <span>{{ $post->updated_at }}</span>   <a href="#">5 комментариев</a></p>
                <p class="post-text-article">{{ $post->description }}</p>
                <a class="btn" href="{{ url('post', ['id' => $post->id]) }}">Продолжить чтение</a>
            </div>
        </article>
@endforeach
@else
    <h1>Постов пока нет!</h1>
@endif
        <div class="pagination">
            <ul>
                <li><a href="#">1</a></li>
                <li><a href="#">2</a></li>
                <li><a href="#">></a></li>
            </ul>
        </div>
    </section>
@endsection

Все это выдает эту ошибку
b0f09087d5954223b12f084963a21af8.PNG
  • Вопрос задан
  • 802 просмотра
Решения вопроса 1
@Result007
P|-|P
Попробуйте:

так
public function category()
{
    return $this->hasOne('App\Category', 'category_id');
}


или так
public function category()
{
    return $this->belongsTo('App\Category', 'category_id');
}


UPD: Если классы лежат в одном каталоге, можно вместо 'App\Category' писать Category::class
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы