2017-02-02 4 views
0

使用バージョン:Laravel 5.4その後の関連付け

私たちには投稿があり、その投稿には複数の写真が関連付けられています。私たちは、ポストを保管するためにコントローラーを使用し、写真を保管するためにもう1つを使用します。

我々はそうのようなモデルで関係を設定します。私は新しい投稿を作成するフォームに行くとき、私は実際にポストを保存前

class Post extends Model 
{ 
    public function pictures() 
    { 
     return $this->hasMany(Picture::class); 
    } 
} 

class Picture extends Model 
{ 
    public function post() 
    { 
     return $this->belongsTo(Post::class); 
    } 
} 

、私はそのポストに画像を追加することができます。つまり、私が写真を保存するとき、それに関連するポストIDはまだありません。

私の質問は以下のとおりです。

  • のみ PHPを使用して、前またはその後のポストに写真を関連付けるクリーン方法はありますか?

私が現在使っている解決策は、新しい投稿を作成するフォームに行くと、手前に空白の新しい投稿が作成され、そのURLにIDを渡すということです。それを行うにはより良い方法でなければなりません。

+0

最初に投稿を作成してから写真を作成するのはどうですか? – Vikash

+0

写真は投稿作成フォームの一部です。ユーザーが画像を追加すると、実際の投稿はまだ作成されていません。投稿が保存されるときに関連付けを行う必要があります。 – Ruben

+0

また、同じフォームから最初に投稿を作成してから、同じコントローラ機能で画像をアップロードすることができます。まれにポストが作成され、写真がアップロードされなかった場合には、laravelのクエリビルダートランザクションを使用するか、失敗した場合に投稿IDを収集して削除することができます。 try catchブロックを使用することができます。 – Vikash

答えて

0

あなたは、ユーザーのアクセスが(あなたがすでにやっているよう)投稿ページを作成するときに、フォームを作成し、この

最初に試すことができます。

は、これが作成ポストビュー

public function showCreatePost() 
{ 
    $post = Post::create(['field_name' => '', // put your attributes]); 

// pass other data as well if you want. 
    return view('your_create_view',compact('postId',$postId)); 
} 

変更postidを持つことになりますimageuploadのあなたのルートを示している、あなたの関数であると仮定します。たとえば、

Route::post('post/image/{postId}','[email protected]'); 

投稿を編集するための1つのルートを作成し、投稿IDを持つ投稿を編集するために使用します。

Route::post('post/edit/{postId}','[email protected]'); 

これらの2つのルートをフォームアクションとして使用して、投稿を編集して画像をアップロードできます。以下のルートの例

URLにidを表示することはお勧めできません。このようにすれば、問題が発生した場合に私に知らせてみることができます。

+0

私は今何をしているかのように見えます。あなたはフォームアクションでIDを渡すので、少しクリーナー。 – Ruben

+0

Yaですが、ユーザーには表示されません。ユーザーが詳細を保存するときはいつでも、あなたは編集ルートを打つでしょう。 – Vikash

関連する問題