私は現在、ユーザーとクライアントを格納する2つのテーブルを持っています。クライアントは、1対1の関係でユーザーに関連しています。Laravelは、外国の関係を持つモデルを作成して更新します
私は現在
public function store(Request $request)
{
$requestData = $request->all();
$user = new User();
$user->fill($requestData);
$user->save();
$client = new Client;
$client->fill($requestData);
$client->user()->associate($user);
$client->save();
return response()->json($client->toArray(), 201, ['id' => $client->id]);
}
public function update(Request $request, $id)
{
try {
$client = Client::findOrFail($id);
$user = User::findOrFail($client->fk_user);
} catch (ModelNotFoundException $e) {
return response()->json([
'error' => [
'message' => 'Client not found',
]
], 404);
}
$requestData = $request->all();
$user->fill($requestData);
$user->save();
$client->fill($requestData);
$client->user()->associate($user);
$client->save();
return response()->json($client->toArray(), 200);
}
は別のモデルとして、ユーザーとクライアントの両方で動作することを避けるために、これをリファクタリングする方法はあります...保存・更新そうのようなモデルを、それはむしろ不格好感じています。おそらくクライアントを埋める方法があり、親のユーザーモデルを埋めるのでしょうか?
おかげさまで、感謝します。
たぶん、ユーザーとクライアントを格納例えば、自分の方法に抽出によりロジックの一部を開始します。その後、あなたはまた、それらを再利用する能力を得る。 また、いくつかのレスポンス・メソッドを設定して、ストア/更新メソッドにすべてのレスポンス・タイプとステータス・コード・ジャンクを持つ必要はありません。 –
ああ大丈夫@IsakBerglindに感謝しますが、クライアントを満たすためのLaravelの方法はありませんし、この場合、ユーザーはいっぱいですか? – liamjnorman
これをクライアントモデルに追加し、要求データを送信して保存することができます。例:$ client-> saveAndAssociateUser($ requestData); –