2017-02-02 5 views
0

Используемая версия: Laravel 5.4Последующие отношения

У нас есть сообщение, и у этого сообщения может быть несколько связанных с ним изображений. Мы используем контроллер для хранения сообщения, а другой - для хранения изображений.

Мы установили отношения в модели, как так:

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

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

Когда я иду в форму, чтобы создать новый пост, я могу добавить фотографии на этот пост перед тем я на самом деле сохранить пост. Это означает, что когда я сохраняю изображение, у меня до сих пор нет идентификатора сообщения, чтобы связать его.

Мои вопросы:

  • Использование только PHP, есть чистый способ связать изображения к посту до или после?

Решение, которое я использую в настоящее время, заключается в том, что когда я перехожу к форме для создания нового сообщения, перед созданием создается новый новый пост, и я передаю идентификатор на URL. Это должен быть лучший способ сделать это.

+0

Что вы хотите создать, сначала, а затем изображение? – Vikash

+0

Изображения являются частью формы создания сообщения. Поэтому, когда пользователь добавляет свои фотографии, фактическое сообщение еще не создано. Связь должна выполняться при сохранении сообщения. – Ruben

+0

Тогда также. из той же формы вы можете создать пост сначала, а затем загрузить изображение в ту же функцию контроллера. если вы беспокоитесь о том, что в каком-то редком случае сообщение создалось, а фотографии не загружались, вы можете использовать транзакцию запросов laravel или вы можете собрать идентификатор сообщения и удалить в случае сбоя. вы можете использовать блок catch try. – 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)); 
} 

изменить ваш маршрут ImageUpload, который будет иметь сообщения дан. например

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

создать один маршрут для редактирования поста и использовать его для редактирования поста, который будет иметь идентификатор сообщения.

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

Теперь используйте эти два маршрута как действие формы, и вы можете отредактировать сообщение и загрузить изображение. пример маршрута ниже

Показаны ID в URL-адресе, это не очень хорошая идея. поэтому таким образом вы можете попытаться сообщить мне, если у вас возникнут какие-либо проблемы.

+0

Он очень похож на то, что я делаю сейчас. Немного чище, потому что вы передаете id только в форме. – Ruben

+0

Ya, но он не будет отображаться для пользователя. поэтому всякий раз, когда пользователь будет сохранять данные, вы попадете в маршрут редактирования. – Vikash