#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
Для получения дополнительной информации: нажмите здесь