Laravel (HasMany) не извлекает значения

У меня есть следующие модели:

    namespace App;

use Illuminate\Database\Eloquent\Model;

class forum_category extends Model
{
    //

    protected $table = 'forum_category';

    public function posts()
    {
        $this->hasMany('App\forum_post');
    }
}

А также

namespace App;

use Illuminate\Database\Eloquent\Model;

class forum_post extends Model
{
    //
    protected $table = 'forum_post';


    public function category()
    {
        $this->belongsTo('App\forum_category');
    }
}

в моем контроллере я пытаюсь получить все категории с их сообщениями:

    namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Routing\Controller;

use App\forum_category as forum_category;


class ForumController extends Controller
{

    public function __construct()
    {

    }

    public function index ()
    {

        $categories = forum_category::all();

        return view('forum', ['categories' => $categories]);
    }

    public function createPost()
    {

    }

    public function createReply()
    {

    }
}

Однако, похоже, он возвращает только мои категории.

Может кто-нибудь сказать мне, что я сделал неправильно?


person Marc Rasmussen    schedule 24.01.2018    source источник


Ответы (1)


Запрос должен выглядеть так:

$categories = forum_category::with('posts')->get();

https://laravel.com/docs/5.5/eloquent-relationships#eager-loading

Если у вас есть category_id в таблице forum_post, это загрузит категории со связанными сообщениями.

Затем просто переберите коллекцию, чтобы получить сообщения:

@foreach ($categories as $category)
    @foreach ($category->posts as $post)
        {{ $post->title }}
    @endforeach
@endforeach

Кроме того, отношения должны быть:

public function category()
{
    return $this->belongsTo('App\forum_category');
}
person Alexey Mezenin    schedule 24.01.2018
comment
когда я пытаюсь это сделать, я получаю: вызов функции-члена addEagerConstraints() для null - person Marc Rasmussen; 24.01.2018
comment
@MarcRasmussen MarcRasmussen Я обновил ответ. Вам тоже нужно наладить отношения. - person Alexey Mezenin; 24.01.2018
comment
То же самое относится и к почтовому отношению в модели категории. Вы пропустили, чтобы вернуть его. - person common sense; 25.01.2018