Laravel не может получить данные связи выбранного профиля

#laravel #eloquent #relationship

#laravel #красноречивый #связь

Вопрос:

Я только что создал профиль для пользователей и хочу показать сведения об образовании, связанные с зарегистрированным пользователем или другим выбранным пользователем.

для этого я создал модель обучения для пользователей и установил с ней правильные отношения с обеих сторон. я не могу получить какие-либо данные из таблицы образования зарегистрированного пользователя или другого пользователя. я использовал тег foreach в файле блейда. пожалуйста, просмотрите мой код. Спасибо.

Модель обучения

 class Education extends Model
{
    use HasFactory;

    protected $primaryKey = 'education_id';

    public function myusers()
    {
        return $this->belongsTo('AppModelsUser','user_id','education_id');
    }

}
 

Пользовательская модель

   public function myeducation()
    {
        return $this->hasMany('AppModelsEducation','education_id','user_id');
    }
 

Контроллер профиля

    public function index()
    {

         $user = Auth::user();


          return view('candidate.profile',['user'=>$user,]);
    }
 

Блейд-файл

  @foreach ($user->myeducation as $education)
                    <div>
                       {{  $education->school }}
                    </div>

                @endforeach
 

Структура таблицы образования и пользователей

 **Education Table**

{
        Schema::create('education', function (Blueprint $table) {
            $table->bigIncrements('education_id');
            $table->bigInteger('user_id');
            $table->string('school');
            $table->string('degree');
            $table->string('fieldOfStudy');
            $table->date('startDate');
            $table->date('endDate');
            $table->string('grade');
            $table->string('activities');
            $table->string('description');
            $table->timestamps();
        });
    }
 

пользовательская таблица.

         $table->increments('user_id');
        $table->bigInteger('role_id');
        $table->bigInteger('membership_id')->nullable();
        $table->string('firstname');
        $table->string('lastname');
 

сообщения об ошибке нет, просто пустое

 Table entries

 DB::table('education')
            'user_id' => '2',
            'school' => 'University of Bedfordshire',
            'degree' => 'MBA',
            
        ]);



 DB::table('users')->insert([
            'user_id' => '1',
            'role_id' => '1',
            'firstname' => 'Mohammed',
            'lastname' => 'Sabeel',
            .......
        ]);

        DB::table('users')
            ' user_id' => '2'
            'role_id' => '2',
            'firstname' => 'zahida',
            'lastname' => 'sabeel',
            .......
        ]);
 

Комментарии:

1. Как выглядят ваши таблицы? Ключи кажутся немного странными для отношений. У вас есть user_id и education_id которые звучат как два разных значения. Ключи должны представлять одно и то же значение в обеих таблицах (например, переменные модели $user->id === $education->user_id ). Если это утверждение уже верно, то вам не нужно вручную определять ключи, поскольку Laravel сделает это за вас.

2. привет @matticustard. user> user_id и Education> user_id имеют одинаковые значения. и ключи уже введены вручную. пожалуйста, проверьте структуру таблицы, прикрепленную к моему вопросу. Спасибо

Ответ №1:

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

в Education модели используйте код, подобный

 public function myUser()
{
    return $this->belongsTo('AppModelsUser', 'user_id');
}
 

вам не нужно передавать третий аргумент, если вы используете первичный ключ для связи. хотя вы можете передать третий аргумент, чтобы определить, какой столбец использовать для объединения таблиц

 public function myUser()
{
    return $this->belongsTo('AppModelsUser', 'user_id', 'user_id');
    // second argument user_id is from your education model while the third argument that is user_id is the primary key of your user model
    // i have used singular name for the relationship name with camel case
}
 

теперь в User модели

 public function myEducations()
{
    return $this->hasMany('AppModelsEducation', 'user_id');
    // user_id is the user_id of education model
    // and this is a has many relation i used plural form
}
 

подробнее об отношениях читайте в laravel doc

Комментарии:

1. большое вам спасибо. это помогло мне. и теперь я вижу результаты.

Ответ №2:

Прежде чем мы начнем, убедитесь, что у вас есть образование, связанное с этим зарегистрированным пользователем.

Попробуйте нетерпеливо загрузить ваши отношения. Когда-то это работало для меня.
В вашем контроллере профиля,

 public function index()
{

     $user = Auth::user()->load('myeducation');


      return view('candidate.profile',['user'=>$user,]);
}
 

Даже если это не сработало, пожалуйста, поделитесь своей структурой таблицы и записями таблицы. Чтобы мы могли четко изучить.

Комментарии:

1. это не работает. пожалуйста, проверьте структуру таблицы