Отношения модели laravel hasOne

У меня есть две таблицы, первая - это учетные записи (модель пользователя), которая используется для аутентификации, а другая - студенты (модель t_student), которая содержит сведения о студентах, такие как идентификатор студента (S_ID)

Я пытаюсь получить S_ID внутри функции контроллера в магазине для вошедшего в систему пользователя.

     $application = new Application;
     $application->A_ID= $request-> input('A_ID');
     $application->S_ID= Auth()->User()->students()->S_ID;
     $application->S_Justification= $request-> input('Justification');
     $application->save();
     return redirect('/Abstracts')->with ('success', 'application submitted' );

Модель MY User (таблица счетов)

class User extends Authenticatable{

protected $table = 'accounts';
protected $primaryKey = 'Account_ID';

use Notifiable;

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
     'email', 'password', 'Account_Type', 'name'
];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token',
];
public function abstracts(){
    return $this ->hasMany('App\Project' , 'PI_ID');
}
public function academics(){
    return $this ->hasOne('App\T_user', 'Account_ID');
}
public function students(){
    return $this ->hasOne('App\t_student', 'Account_ID');
}}

моя t_student модель

class t_student extends Model{
protected $table = 't_student';
protected $primaryKey = 'S_ID';

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

и я получаю эту ошибку

Undefined property: Illuminate\Database\Eloquent\Relations\HasOne::$S_ID

Обновлено: ошибка, которую я получаю, связана с моим контроллером

         $application->S_ID= Auth()->User()->students()->S_ID;

и причина в моих отношениях, но я не уверен, что в них не так

Причина в том, что Auth()->User()->students() возвращает одно отношение HasOne, вы должны использовать first() для получения данных.

Thai Nguyen Hung 28.12.2018 04:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
824
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы должны его изменить:

$application->S_ID= Auth()->User()->students->S_ID;

В модели пользователя u должен добавить внешний ключ ко второму параметру в функции hasOne. поэтому замените Account_ID на S_ID например:

// in user model   
public function students()
{
   return $this ->hasOne('App\t_student', 'S_ID');
}
 // in ur controller romove the parentheses of students propriety 

Другие вопросы по теме