Laravel красноречивые отношения не работают - PullRequest
0 голосов
/ 22 марта 2019

У меня есть две таблицы как users и notifications, и у меня есть внешний ключ notification_id в моей таблице users, а в notifications.blade.php я пытаюсь получить пользователя через id из notifications таблица как:

NotificationController:

public function notifications() {
    $notifications = App\Notification::latest('created_at')->get();
    return view('notifications', compact('notifications'));
}

notifications.blade.php:

@foreach ($notifications as $notification)
    {{ $notification->user->id }}
@endforeach

User.php (модель):

public function notifications() {
    return $this->hasMany('App\Notifications', 'notification_id');
}

Notification.php (модель):

public function user() {
    return $this->belongsTo('App\User', 'notification_id');
}

Схема таблицы уведомлений:

Schema::create('notifications', function (Blueprint $table) {
    $table->engine = "InnoDB";
    $table->increments('id');
    $table->string('message');
    $table->timestamps();
});

Схема таблицы пользователей:

Schema::create('users', function (Blueprint $table) {
    $table->engine = 'InnoDB';
    $table->increments('id');
    $table->string('email')->unique();
    $table->string('password');
    $table->unsignedInteger('notification_id')->nullable();
    $table->foreign('notification_id')->references('id')->on('notifications');
});

но я получаю Попытка получить свойство необъекта Ошибка.

Ответы [ 2 ]

1 голос
/ 22 марта 2019

внешний ключ должен быть в Notification модели (user_id) вместо User модели.потому что ваши отношения говорят, что

РЕДАКТИРОВАТЬ:

ваш код должен быть таким: User.php (модель):

public function notifications() {
  return $this->hasMany('App\Notification', 'user_id');
}

Уведомление.php (модель):

public function user() {
    return $this->belongsTo('App\User', 'user_id');
}

Схема таблицы уведомлений:

Schema::create('notifications', function (Blueprint $table) {
    $table->engine = "InnoDB";
    $table->increments('id');
    $table->string('message');
    $table->timestamps();
    $table->unsignedInteger('user_id')->nullable();
    $table->foreign('user_id')->references('id')->on('user');
});

Схема таблицы пользователей:

Schema::create('users', function (Blueprint $table) {
    $table->engine = 'InnoDB';
    $table->increments('id');
    $table->string('email')->unique();
    $table->string('password');
});
0 голосов
/ 26 марта 2019

Я исправил эту проблему, благодаря Крису Форренсу , я изменил отношение, как сказал Крис Форренс .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...