Получение данных из нескольких таблиц - PullRequest
0 голосов
/ 28 ноября 2018

В моей базе данных есть таблица Student, которая соединяет многих со многими с помощью таблицы Courses. Когда я пытаюсь выбрать ученика из таблицы, выдается ошибка: «Неопределенное свойство: stdClass :: $ courses (Представление: C: \ xampp \htdocs \ laravel \ resources \ views \ admin \ student \ index.blade.php)

              <td>
               @foreach($student->courses as $course)
                     <label>{{$course->name_courses}}</label>
               @endforeach                
              </td> 

При редактировании и обновлении произошла ошибка:

    public function edit(Student $student)
{

    $id = $student->id;
    $students = DB::table('student')
    ->join('contacts', 'student.contact_id', '=', 'contacts.id')
    ->join('users', 'contacts.user_id', '=', 'users.id')
    ->select('contacts.*', 'users.*', 'student.*')
    ->where(['student.id' => $id])
    ->first();


    $courses = Course::all();
    $course2 = array();
    foreach ($courses as $course) {
        $course2[$course->id] = $course->name;
    }
     return view('admin.student.edit', ['student' => $students]);
}

Обновление функции:

 public function update(Request $request, Student $student)
{
    Student::updateStudent($request->all());    
    if (isset($request->courses)) {
        $student->courses()->sync($request->courses);
    } else {
        $student->courses()->sync(array());
    }
    return redirect("/admin/student")->with('success','Has been Update');
}

в модели Student

  public static function createStudent($data) {
    /*
    $user = User::create([
        'username' => $data['user_name'],
        'role_id' => 1,
        'password' => Hash::make($data['password']),
    ]);*/
    $user = User::createUser($data) ; 
    $data['user_id'] = $user['id'];
    $contactId = Contact::createContact($data);
    $student = Student::create([
        'contact_id' => $contactId
    ]);


    return $student;

    }

public static function updateStudent($data) {
 /*   DB::table('users')
        ->where('id', $data['user_id'])
        ->update([
            'username' => $data['username']
        ]);*/
    User::updateUser($data);
    Contact::updateContact($data);

        }

public function courses()
{
    return $this->belongsToMany('App\Course');

}

Может кто-нибудь сказать мне, что делать, чтобы это исправить?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

В вашем коде 2 проблем:

1-

Ниже показано, что вы используете Query Builder вместо Eloquent

$students = DB::table('student')
    ->join('contacts', 'student.contact_id', '=', 'contacts.id')
    ->join('users', 'contacts.user_id', '=', 'users.id')
    ->select('contacts.*', 'users.*', 'student.*')
    ->where(['student.id' => $id])
    ->first();

И вы не join таблица courses.

2-

Построитель запросов вернет Array, а не объект.Таким образом, чтобы получить доступ к курсу, вы должны сделать это вместо этого, $course['name_courses']:

<td>
    @foreach($student->courses as $course)
        <label>{{$course['name_courses']}}</label>
    @endforeach                
</td>

. Чтобы исправить проблему, проще сделать следующее:

$students = Student::with('courses', 'contacts, 'contacts.users')
    ->where('id', '=', $id) //the 'id' here refers to 'student' ID.
    ->first();

и затем вы можете выполнить циклза курсы, которые принадлежат этому конкретному студенту.

0 голосов
/ 28 ноября 2018

Похоже, вы используете привязку модели маршрута, и вашему ученику вводится инъекция, если в этом случае вам не нужно использовать DB::table(...

public function edit(Student $student)
{
    $courses = Course::all();
    $course2 = array();
    foreach ($courses as $course) {
        $course2[$course->id] = $course->name;
    }

    return view('admin.student.edit', ['student' => $student]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...