Laravel как отобразить строку путем передачи атрибута в моей модели

Я пытаюсь отобразить объект для моего студента на основе атрибута под названием » stn » в таблице students. Я смог отобразить его при использовании первичного ключа, но при использовании атрибута функция не возвращает ничего, когда она возвращала объект.

@foreach($users as $user)

    @foreach($user->contactlogs as $logs)

        {{ $logs->students }}

    @endforeach

@endforeach

Это используется для отображения объекта student, теперь он поставляется с ничего, это мои модели

class ContactLog extends Model
{

    protected $table = 'contactlogs';

    public function users()
    {
        return $this->belongsTo(User::class, 'id');
    }
    public function students()
    {
        return $this->belongsTo(Student::Class);
    }

}

class Student extends Model
{

    protected $table = 'students';

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

    public function contactlogs()
    {
        return $this->hasMany(ContactLog::class);
    }

}

3 ответа

  1. Ну в вашем контроллере вы должны иметь что-то вроде этого:

    public function yourAction(){
        $users = ContactLog::with('users', 'students')->get();
        return view('your.view' , compact('users'));
    }
    

    тогда, по вашему мнению, вы должны сделать это:

    @foreach($users as $user)
    {{ $user->users->name }}
    {{ $user->students->name }}
    @endforeach
    

    И вы можете сделать то же самое для студентов тоже:

    public function yourAction(){
         $students = Student::with('users', 'contactlogs')->get();
          return view('your.view' , compact('students'));
     }
    

    то же самое для вашего представления

    @foreach($students as $student)
        {{ $student->users->attr }} //attr is the attribute from users
        {{ $student->contactlogs->attr }}// attr is the attribute from contaclogs
    @endforeach
    
  2. Я смог отобразить информацию следующим образом

        $student = Student::where('stn', '=', $request->stn)->first();
    
        $log->student_id = $student->id;
    

    где он выполняет поиск stn и возвращает первое совпадение, они уникальны, поэтому он должен работать, затем он сохраняет идентификатор, и в представлении я могу просто отобразить STN вместо идентификатора

  3. Попробуйте contactlogs () вместо contactlogs

    @foreach ($users as $user)

    @foreach($user->contactlogs()  as $logs)
    
        {{ $logs->students }}
    
    @endforeach
    

    @endforeach