Laravel, проблемы в отношениях - PullRequest
0 голосов
/ 19 февраля 2020

это мой первый Laravel проект, и мне нужно сделать LMS (систему управления обучением). У меня есть таблица курса и таблица пользователя.

Вот код моего контроллера:

public function afficheFormation($id)
    {
        $formation = DB::table('formation')->select('formation.*')->where('id', $id)->first();
        $cours = DB::table('Course')->join('Course_formation', 'course_id', '=', 'Course.id')

            ->select('Course.*')->where('formation_id', $id)->get();


        return view('formation', compact('formation', 'cours'));
    }

Вот код моего вида:

<tr>
 <td class="align-middle">{{ $cours->name }}</td>
 <td class="align-middle">{{ $cours->level}}</td>    
 <td class="align-middle">{{ $cours->user() }}</td>
</tr>
@endforeach
@endif

У курса есть внешний ключ Professor_id, и я хочу отобразить имя пользователь, который создал курс, но имеет некоторые ошибки

Это моя модель курса:

class Course extends Model 
{

    protected $table = 'cours';
    public $timestamps = true;

    protected $fillable = [
        'name', 'lien', 'type', 'level', 'theme_id', 'prof_id'
    ];

    public function user()
    {
        return $this->hasOne('App\Models\User');
    }
}

, и это моя модель пользователя:

class User extends Authenticatable
{
    use Notifiable;

    protected $table = 'users';
    public $timestamps = true;

    protected $fillable = [
        'pseudo', 'email', 'password', 'name', 'prenom', 'image'
    ];

    public function roles()
    {
          //return $this->belongsToMany('App\Models\Role', 'user_role', 'user_id', 'role_id');
          return $this->belongsToMany(Role::class);
    }

    public function cours()
    {
        return $this->belongsToMany('App\Models\Course', 'professor_id', 'id');
    }
}

спасибо за помощь .

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

Редактировать

Благодаря Абиру я нашел способ с некоторыми изменениями.

Если я понял, Cours :: with ('user') - это способ вызова функции user ( ) в модели Cours. Это правильно?

public function afficheFormation($id)
    {
        $formation = DB::table('formation')->select('formation.*')->where('id', $id)->first();
        $cours = Cours::with('user')
            ->join('Cours_formation', 'cours_id', '=', 'Cours.id')
            ->select('cours.*')->where('formation_id', $id)->get();

        return view('formation', compact('formation', 'cours'));
    }

По нашему мнению, у нас есть этот код:

@if(count($cours)> 0 )
@foreach($cours as $cours)
<tr>
  <td class="align-middle">
  {{ $cours->name }}
  </td>
  <td class="align-middle">
  {{ $cours->niveau}}
  </td>    
  <td class="align-middle">
  {{ $cours->user->name}}
  </td>
</tr> @endforeach
@endif 

Для модели Cours:

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

И финал для пользователя модель:

public function cours()
    {
        return $this->hasMany(Cours::class);
    }

спасибо.

0 голосов
/ 19 февраля 2020

Попробуйте это в вашем контроллере

$cours = Course::with('cours')
                 ->where('id' , $id)
                 ->get(); 

И в модели курса

public function user()
    {
        return $this->hasMany('App\Models\User' , 'prof_id');
    }

в пользовательской модели

public function cours() {
          return $this->belongsToMany('App\model\Course', 'prof_id', 'id');
    }

Отношение зависит от вас, но выглядит это .. Надеюсь, это поможет немного

...