Laravel-admin一対一の詳細

2509 ワード

一対一の関連
表demo_users
id
username
password
email
1
tom
123456
[email protected]
関連付けの定義
class User extends Model
{
    protected $table = 'demo_users';

    /*
    *        User     Profile   ,          
    *     :User hasOne Profile 【  User       Profile】
    *   (Profile::class,'user_id','id')
    *   (    ,    ,    )
    *     :           ,           
    */
    public function profile(){
        return $this->hasOne(Profile::class,'user_id','id');
    }
}

コントローラでの関連テーブルデータへのアクセス

//   User        Profie    
// Grid
    $grid->column('profile.nick_name',__('NickName'));
    $grid->column('profile.avatar_url',__('Avatar'));
// Show
    $show = new Show(User::with('profile')->findOrFail($id));
    ...
    $show->field('anyName',__('Nick Name'))->as(function (){
        return $this->getRelation('profile')->nick_name;
    });
    $show->field('someName',__('Avatar'))->as(function (){
        return $this->getRelation('profile')->avatar_url;
    });
    ...

表demo_profiles
id
user_id
nick_name
avatar_url
1
1
tom cat
http://.......
関連付けの定義
class Profile extends Model
{
    protected $table = 'demo_profiles';
    /*
    *         Profile       User    ,          
    *     :Profile belongsTo User 【  Profle      User】
    *   (User::class,'user_id','id')
    *   (    ,    ,    )
    *     :           ,           
    */
    public function user(){
        return $this->belongsTo(User::class,'user_id','id');
    }
}

コントローラでの関連テーブルデータへのアクセス
//   Profie        User    
// Grid
    $grid->column('user.username', __('User Name'));
    $grid->column('user.email', __('Email'));
// Show
    $show = new Show(User::with('profile')->findOrFail($id));
    ...
    $show->field('anyName', __('User name'))->as(function (){
        return $this->getRelation('user')->username;
    });
    $show->field('someName', __('Email'))->as(function (){
        return $this->getRelation('user')->email;
    });
    ...