@hirohitoqwe

Почему не работает hasMany в laravel?

У меня есть класс постов у которого есть метод comments, который должен вернуть мне все комментарии:

class Post extends Model
{
    use HasFactory;
    protected $fillable = [
        'title',
        'text',
        'author',
    ];

    public function comments(){
        return $this->hasMany(Comment::class,'post_id');
    }

}

Но почему-то он ничего мне не возвращает, в чем может быть проблема? Внешние ключи в таблице comments указаны, миграция comments:

Schema::create('comments', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('post_id');
            $table->foreign('post_id')->references('id')->on('posts');
            $table->text('text');
            $table->timestamps();
        });

Миграция posts:

Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('text');
            $table->string('author')->nullable();
            $table->timestamps();
        });

Модель Comment пустая.
В чем может быть проблема? Когда смотрю в PMA все связи на месте.
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
iMedved2009
@iMedved2009
Не люблю людей
public function show(int $id)
    {
        $post=Post::find($id);
        $comments=$post->comments()->get();
        dd($comments);
    }


или
public function show(int $id)
    {
        $post=Post::find($id);
        dd($post->comments);
    }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@deyen
Внешний ключ в миграции комментов объявите так:
<?php
...
$table->foreignId('post_id')
                ->nullable()
                ->constrained()
                ->cascadeOnUpdate()
                ->nullOnDelete();


В модели комментов сделайте так:
<?php
...
public function post() {
        return $this->belongsTo(Post::class);
    }


А в модели поста так:
<?php
...
public function comments()
{
     return $this->hasMany(Comment::class);
}


Здесь можете посмотреть миграции и модели из рабочего проекта
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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