Как найти соответствующую запись дочерней таблицы из родительской записи - PullRequest
0 голосов
/ 21 сентября 2019

Я делаю проект в Laravel и использую рюкзак для создания админки.У меня есть таблица с именем users и другая таблица user_details, в которой первичный ключ таблицы users используется в качестве внешнего ключа.Мой вопрос заключается в том, как я могу получить доступ к деталям конкретного пользователя из идентификатора родительской таблицы.В laravel auth и backpack я могу делать что-то вроде

auth()->user()->id;

или для рюкзака я могу использовать

backpack()->user()->id;

Точно так же я думал, что смогу получить все столбцы страницы user_details поделать это:

backpack()->user()->user_details;

Но это не работает таким образом ??

Вот мое приложение \ User.php Модель

<?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
use App\Http\Controllers\Role;
use Illuminate\Notifications\Notifiable;
use App\Models\Student;

class User extends Authenticatable
{
    use Notifiable;
    use HasRoles;
protected $guard_name = 'web';

public function Student(){
    return $this->hasMany('App\Models\Student');
}
public function Exam(){
    return $this->hasMany('App\Models\Exam');
}
public function Result(){
    return $this->hasMany('App\Models\Result');
}
public function Fee(){
    return $this->hasMany('App\Models\Fee');
}

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

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token',
];

/**
 * The attributes that should be cast to native types.
 *
 * @var array
 */
protected $casts = [
    'email_verified_at' => 'datetime',
];
}

и приложение \ Models \ Student.php модель:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Backpack\CRUD\CrudTrait;

class Student extends Model
{
    use CrudTrait;

/*
|--------------------------------------------------------------------------
| GLOBAL VARIABLES
|--------------------------------------------------------------------------
*/

protected $table = 'student_details';
// protected $primaryKey = 'id';
// public $timestamps = false;
// protected $guarded = ['id'];
protected $guarded = [];
// protected $hidden = [];
// protected $dates = [];

/*
|--------------------------------------------------------------------------
| FUNCTIONS
|--------------------------------------------------------------------------
*/

/*
|--------------------------------------------------------------------------
| RELATIONS
|--------------------------------------------------------------------------
*/
public function User()
{
    return $this->belongsTo('App\Models\User');
}
public function ClassRoom()
{
    return $this->belongsTo('App\Models\ClassRoom');
}
public function Exam(){
    return $this->hasMany('App\Models\Exam');
}
public function Result(){
    return $this->hasMany('App\Models\Result');
}
public function Fee(){
    return $this->hasMany('App\Models\Result');
}
/*
|--------------------------------------------------------------------------
| SCOPES
|--------------------------------------------------------------------------
*/

/*
|--------------------------------------------------------------------------
| ACCESORS
|--------------------------------------------------------------------------
*/

/*
|--------------------------------------------------------------------------
| MUTATORS
|--------------------------------------------------------------------------
*/
}

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 21 сентября 2019

У меня есть ответ на мой вопрос, поэтому я публикую его здесь, чтобы другие могли получить помощь от него: На самом деле проблема была в моих моделях.Отношения между родительской и дочерней моделью должны быть следующими:

Родительская модель:

class User extends Model
{
    public function Student()
    {
        return $this->hasOne(Student::class);
    }
}

Дочерняя модель:

class Student extends Model
{
    public function User()
    {
        return $this->belongsTo(User::class);
    }
}
...