Возникли проблемы с реализацией системы загрузки нескольких изображений в Laravel

#php #mysql #file-upload #laravel #laravel-4

#php #mysql #загрузка файла #laravel #laravel-4

Вопрос:

в моем веб-приложении люди могут создавать сообщения. Кроме того, с этими сообщениями они могут загружать несколько изображений. Для этого у меня есть таблица posts и таблица изображений. В сообщениях есть много изображений, и изображение принадлежит сообщению. Поэтому в таблице images есть столбец image_path и столбец post_id. Моя проблема заключается в получении post_id. Поскольку я не могу получить идентификатор записи до того, как сообщение было загружено, я не могу установить, к какому сообщению принадлежит изображение. В любом случае, вот некоторый код:

 public function create(){

    $post = new Post;

    $post->title=Input::get('title');
    $post->body=Input::get('body');
    $post->category=Input::get('category');

    $post->save();

    $images = Input::file('images');

    foreach($images as $image) {

        $destinationPath = 'public/uploads/';
        $filename = $image->getClientOriginalName();

        $image->move($destinationPath, $filename);

        $id=Auth::id();

        $file = new Image();
        $file->image_path = 'uploads/' . $image->getClientOriginalName();
        $file->description = '';
        $file->post_id=Input::get('post_id');

        $file->save();

}
 

Каков наилучший способ решения этой проблемы?

Комментарии:

1. Я думаю, что вместо ввода данных в функции create вы можете просто создать новую запись, как только пользователь нажмет ссылку на создание, и перенаправить на /posts/{id}/edit после процесса создания. Когда вы предварительно создаете записи, Laravel сам вставляет created_at updated_at столбцы и, и вы можете удалить ненужные записи, скажем, через день или неделю, перечислив записи, где created_at updated_at столбцы и равны. Таким образом, вы можете использовать вызовы ajax для загрузки изображений путем перетаскивания, jquery-file-uploader что довольно легко реализовать или просто делать id зависимые вещи.

Ответ №1:

Как только вы сохраните Post using $post->save() , вы можете получить идентификатор с помощью:

 // ...
$post->save();
/...

$file->post_id = $post->id;
 

Вы можете попробовать это вместо:

 // ...
$post->save();

$destinationPath = 'uploads/';
$images = Input::file('images');
foreach($images as $image) {
    $filename = $image->getClientOriginalName();
    $image->move($destinationPath, $filename);

    $file = new Image();
    $file->image_path = 'uploads/' . $image->getClientOriginalName();
    $file->description = '';
    $post->images->save($file);
}