代码之家  ›  专栏  ›  技术社区  ›  blackbird

Laravel 5:保存相关模型时没有外键

  •  -1
  • blackbird  · 技术社区  · 10 年前

    我在User和Profile之间有一个简单的一对一关系,我尝试创建一个用户并用外键一次性保存他们的Profile,避免了必须传递主键和执行两个操作 save() 电话。

    Laravel将尝试插入相应的Profile值,而不让id指向用户。我做错了什么?

    class User extends Model
    {
        public function profile()
        {
            return $this->hasOne('App\Profile');
        }
    }
    
    
    class Profile extends Model
    {
        protected $table = 'user_profile';
    
        public function user()
        {
            return $this->belongsTo('App\User');
        }
    }
    
    class UserController extends Controller
    {
    
      public function create(Request $request)
      {
    
        $this->validate($request, [
        ...
        ]) ;
    
        $user = new User() ;
        $profile = new Profile() ;
    
        $user->name = $request->input('name') ; 
        ...
    
        $profile->first_name = $request->input('first_name') ;
        $profile->last_name = $request->input('last_name') ;
        ...
    
        $user->profile()->save($profile) ;
        // $profile->user()->save($user) ; // doesn't work
    
        // $profile->user()->associate($user) ; // doesn't work
        // $profile->save() ;    
      }
    }
    
    2 回复  |  直到 10 年前
        1
  •  1
  •   ABDEL-RHMAN    10 年前

    首先需要保存用户

    $user = new User;
    
    $user->name = $request->input('name') ; 
    
    $user->save();
    
    $profile = new Profile;
    
    $profile->first_name = $request->input('first_name') ;
    
    $user->profile()->save($profile);
    
        2
  •  -2
  •   Can Celik    10 年前

    您要查找的函数名是“associate”

    $user->profile()->associate($profile);
    
    $user->save();
    
    推荐文章