@Drumsid

Не могу разобраться с отношениями Laravel?

Прохожу обучение php, сейчас пишем проект на laravel и что то завис на отношениях. Не могу разобраться как это работает? Уже читал доку и сторонние ресурсы и, что то нет полной картины пока.
Вопрос такой. Есть 3 таблицы task, user, status. Мне нужна связь между task = user и task = status.
Task = Status я настроил и то методом тыка больше наверное. Теперь вот так я получаю имя статуса $task->status->name
модель Task
public function status()
    {
        return $this->belongsTo(TaskStatus::class);
    }

миграция task
$table->id();
            $table->string('name');
            $table->string('description')->nullable();
            $table->integer('status_id')->default(1);
            $table->integer('created_by_id');
            $table->timestamps();

Модель status
public function task()
    {
        return $this->hasMany(Task::class, 'status_id');
    }

миграция status
$table->id();
            $table->string('name');
            $table->timestamps();

все работает, подобным способом $task->status->name получаю статус

по аналогии пытаюсь получить имя юзера создавшего таск
модель Task
public function user()
    {
        return $this->belongsTo(User::class);
    }

модель user
public function tasks()
    {
        return $this->hasMany(Task::class, 'created_by_id');
    }

но при попытке получить имя $task->user->name приходит null. И не пойму почему. Вроде все так же как в первом случае... короче застрял. пробовал связывать таблицы через foreign но там ошибок накидало при миграции...
Заодно посижу сам потуплю в то что написал, бывает напишешь вопрос и сам потом ответ находишь.... ну или кто подскажет куда копать чтоб разобраться....
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 1
@jazzus
$table->integer('created_by_id');
заменить на
$table->foreignId('user_id')->constrained('users');

только поле id в таблице users должно быть
$table->id();
т.е. bigIncrements
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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