Попытка получить свойство user необъектного Laravel

#php #laravel

#php #laravel

Вопрос:

У меня есть обзор модели с:

 public function shop()
{
    return $this->belongsTo(Shop::class);
}

public function user()
{
    return $this->belongsTo(User::class);
}

public function parent()
{
    return $this->belongsTo(static::class, 'id', 'parent_id');
}

public function isParent()
{
    return !$this->parent_id;
}

public function children()
{
    return $this->hasMany(static::class, 'parent_id');
}

public function sendReviewNotification()
{
    if ($this->isParent()) {
        $this->shop->owner->sendReviewParentNotification($this);
    } else {
        if ($this->user->is($this->parent->user)) {
            $this->shop->owner->sendReviewCommentNotification($this);
        } else {
            $this->parent->user->sendReviewCommentNotification($this);
        }
    }
}
  

Когда я добавляю дочерний комментарий к родительскому комментарию, я получаю ошибку: ‘Пытаюсь получить свойство user’ из необъектного’, в ReviewObserver я вызываю sendReviewNotification следующим образом:

 public function created(Review $review)
{
    $review->sendReviewNotification();
}
  

Когда я добавляю родительский модуль. Чем все работает, но когда я добавляю дочерний комментарий, чем я получаю эту ошибку. Почему parent отношение не работает?

Ответ №1:

Вы должны передать внешний ключ в качестве второго параметра, а не идентификатор:

 public function parent()
{
    return $this->belongsTo(Parent::class, 'parent_id');
}
  

Документы:

Eloquent определяет имя внешнего ключа по умолчанию, проверяя имя метода взаимосвязи и добавляя к имени метода _id суффикс. Вы можете передать имя пользовательского ключа в качестве второго аргумента методу belongsTo

Для получения дополнительной информации: нажмите здесь