#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);
}