私はoppsとlaravel両方に慣れていないので、users
とprofiles
テーブルに値を挿入するには、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
}
_
新しいレコードを作成しているため、dd()
はプロファイルテーブルに関連するものを返しません。
これは、_$user
_オブジェクトにデフォルトで関係が含まれていないためですか?はいの場合、関連する関係を含む_$user
_オブジェクトをUser
モデルに作成できますか?
または、各テーブルの2つの個別のオブジェクトとsave()
データを作成する必要がありますか
しかし、Push()
メソッドの意味は何ですか?
編集1 P.S.はい、関係はUser
&Profile
モデルですでに定義されています
次のようなことを試してみてください。最初に、次のように親モデルを保存します。
$user = new \App\User;
$user->first_name = $request->input('first_name');
// ...
$user->save();
次に、次のようなものを使用して関連モデルを作成して保存します。
$profile = new \App\Profile(['mobile_no' => $request->input('mobile')]);
$user->profile()->save($profile);
また、profile
モデルにUser
メソッドを作成したことを確認します。
public function profile()
{
return $this->hasOne('App\Profile');
}
この回答を更新して、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();
これは、save
リレーション(またはその他)でbelongsTo
を呼び出せなくなったためです。これにより、Illuminate\Database\Query\Builder
のインスタンスが返されるようになりました。
これを行うためのクリーンな方法は、ユーザークラスファイルを使用することです。
public function profile()
{
return $this->hasOne(App\Profile::class);
}
ユーザーコントローラーでは、次のストアメソッド:
public function store(Requests\StoreNewUser $request)
{
$user = App\User::create(
$request->only(
[
'first_name',
'last_name',
'email'
]
)
);
$user->password = Illuminate\Support\Facades\Hash::make($request->password);
//or $user->password = bcrypt($request->password);
$user->profile()->create(
[
'mobile_no' => $request->mobile;
]
);
dd($user);
}
プレーンテキストのパスワードをデータベースに保存するのか、パスワード属性にミューテーターを使用するのかはわかりませんでした。
これは、$ userオブジェクトにデフォルトで関係が含まれていないためですか?はいの場合、関連付けられた関係を含む$ userオブジェクトをユーザーモデルに作成できますか
はい、関係を作成する必要があります。それらはdefaultに含まれていません。
User
モデルでは、次のような処理を行います。
public function profile()
{
return $this->hasOne('App\Profile'); // or whatever your namespace is
}
これには、Profile
モデルを作成する必要もあります。
これは、関連モデルの挿入に関する質問に間違いなく答えます。 http://laravel.com/docs/5.1/eloquent-relationships#inserting-related-models
Alphaが述べたように、そしてあなたも気づかなかったように、最初にユーザーモデルを保存してからvia関係を追加する必要があると思います。