创建包含关系的Eloquent对象

ech*_*shu 9 php foreign-key-relationship laravel eloquent laravel-5

我对opps和laravel都很陌生.所以,将值插入我的usersprofiles表中的hav OneToOne关系,这是我的store()方法看起来像

public function store(Requests\StoreNewUser $request)
{
    // crate an objct of user model
        $user = new \App\User;
        // now request and assign validated input to array of column names in user table
        $user->first_name = $request->input('first_name');
        $user->last_name = $request->input('last_name');
        $user->email = $request->input('email');
        $user->password = $request->input('password');
        /* want to assign request input to profile table's columns in one go 
        */
        $user->profile()->user_id = $user->id; // foreign key in profiles table
        $user->profile()->mobile_no = $request->input('mobile'); 
        dd($user); // nothing related to profile is returned
}
Run Code Online (Sandbox Code Playgroud)

我正在创建新记录,因此dd()永远不会返回与配置文件表相关的任何内容.

这是因为$user默认情况下对象不包括关系吗?如果是,我可以创建$user包含User模型中关联关系的对象吗?

或者我是否必须为每个表和save()数据创建两个单独的对象
但是那么push()方法的意义是什么?

编辑1 PS是的,关系已在User&Profilemodel中定义

The*_*pha 15

您可以尝试以下内容.首先保存父模型,如下所示:

$user = new \App\User;
$user->first_name = $request->input('first_name');
// ...

$user->save();
Run Code Online (Sandbox Code Playgroud)

然后使用以下内容创建并保存相关模型:

$profile = new \App\Profile(['mobile_no' => $request->input('mobile')]);
$user->profile()->save($profile);
Run Code Online (Sandbox Code Playgroud)

还要确保profileUser模型中创建了方法:

public function profile()
{
    return $this->hasOne('App\Profile');
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 5

我以为我会更新此答案并将其应用于Laravel 5及更高版本。我将使用@The Alpha答案作为基础。

$profile = new \App\Profile(['mobile_no' => $request->input('mobile')]);
$user->profile()->associate($profile); // You can no longer call 'save' here
$user->profile()->save();
Run Code Online (Sandbox Code Playgroud)

原因是您无法再调用savebelongsTo关系(或任何其他关系),这现在返回的实例Illuminate\Database\Query\Builder