Вставить пост и изображения в одну запись

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

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

Я передаю вам код.

public function store(Request $request)
    {
     /*******************************************************VALIDACIONES CAMPOS*********************************/
       $validador =  \Validator::make($request->all(),
                    array('titulo' => 'required',
                        'contenido' => 'required',
                     //   'imagen' => 'required|image'
                            ),
                    array(
                        'required' => 'El campo :attribute es requerido ahora mismo', 
                        )
            );
       if ( $validador->fails()) :
            return redirect()->back()->withErrors($validador);
        endif;   /*******************************************************FIN VALIDACIONES CAMPOS*********************************/ 

                               /*******************************************************CREACION POST*********************************/
        $nombreimagen = 'mesteban_'.time().'.'.$request->file('imagen')->getClientOriginalExtension();

      function devuelveImagen()
      {
            if( $request->HasFile('imagen')):
                  return $nombreimagen;
              else:
                  return 'ruta de imagen personalizada_'.rand(10000,20000);
              endif;
      }

     devuelveImagen();

       $datosaInsertar = 
       array(
            'titulo' => $request->titulo,
            'imagen' => $this->devuelveImagen(),
            'contenido' => $request->contenido,
            'url' => str_slug($request->titulo),
            );
       $creandoPost = \App\modelos\post::create($datosaInsertar);
         \Session::flash('estado','El post de nombre ..:: '.$request->titulo.' ::.. ha sido creado correctamente');

         /*******************************************************FIN CREACION POST*********************************/

         /*******************************************************CREACION IMAGEN*********************************/


         $ruta = public_path('ima\posts\\');


       if($nombreimagen):
           $request->file('imagen')->move($ruta,$nombreimagen);

       //USANDO LIBRERIA INTERVENTION PARA REDIMENSIONAR IMAGEN;
       \Image::make($ruta.$nombreimagen)->resize(300,300)->save();


          //  \App\modelos\post::create(array('imagen'=> $nombreimagen));
        endif;
         /*******************************************************FIN CREACION IMAGEN*********************************/

        return redirect()->to('/admin/posts');
    }

ПОЧТА МОДЕЛЬ

<?php

namespace App\modelos;

use Illuminate\Database\Eloquent\Model;

class post extends Model
{

    protected $table = 'posts';

    protected $fillable = ['titulo','contenido','imagen','url'];

}
0
задан 18.10.2016, 13:32
1 ответ

Я думаю, что твоя проблема - что "Модель" не сохраняться

Я помещаю тебе пример, как считаю это я сделанным, и ты говоришь мне, стоит ли он тебе:

$validator = \Validator::make($request->all(), (new DirectoriosRequest)->rules($request));

    if ($validator->fails()) {
        \Redirect::back()->withErrors($validator->messages())->withInput();
    }

    $directorio = new Directorio();

    $directorio->categoria = $request->categoria;
    $directorio->subcategoria = $request->subcategoria;
    $directorio->nombre = $request->nombre;
    $directorio->descripcion = $request->descripcion;

    $destinationPath =  env('DIRECTORIO_UPLOAD_DIR', 'admin/directorios');
    $extension = $request->archivo->getClientOriginalExtension();
    $fileName = pathinfo($request->archivo->getClientOriginalName(), PATHINFO_FILENAME)."_archivo_".rand(11111,99999).'.'.$extension;
    $request->archivo->move($destinationPath, $fileName);
    $directorio->archivo = $fileName;

    if (isset($request->thumbnail)) {
        $destinationPath =  env('DIRECTORIO_UPLOAD_DIR', 'admin/directorios');
        $extension = $request->thumbnail->getClientOriginalExtension();
        $fileName = pathinfo($request->thumbnail->getClientOriginalName(), PATHINFO_FILENAME)."_thumbnail_".rand(11111,99999).'.'.$extension;
        $request->thumbnail->move($destinationPath, $fileName);
        $directorio->thumbnail = $fileName;
    }

    $directorio->save();

    return \Redirect::to(action('Admin\DirectorioController@index'));

В моем случае validator:

Public function rules()
    {
        $rules = [
            'categoria'     => 'required|string',
            'nombre'        => 'required|string',
            'descripcion'   => 'required|string',
            'archivo'       => 'required',
        ];

        return $rules;
    }
}

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

В твоем случае я не вижу save() Model

Edit: Он создает тебе два реестра, потому что второй create у него нет присоединенной идентификации, следовательно для Eloquent в новой "Модели". Дай этому его create та же идентификация и тогда он не создаст новый реестр.

0
ответ дан 24.11.2019, 13:03
  • 1
    Ну, это решение знало ее, но поэтому я комментировал тебе, что он предпочитал делать это из-за eloquent, Относительно этого сохранения модели, эта здесь $creandoPost = \App\modelos\post:: верьте в ($datosaInsertar); и если ты обращаешь внимание немного ниже, прокомментированный эта//\App\modelos\post:: создай тебя (array (' imagen' = > $nombreimagen)); но я это прокомментировал, из-за которого это - то, что он делает вторым inserccion, отсюда функция devuelveImagen (), что верит он, чтобы пробовать перемещать правильный параметр в изображение в случае, если он существует или нет, но этот выбор дает мне неудачу request, не, из-за которого – KurodoAkabane 18.10.2016, 13:51
  • 2
    @KurodoAkabane я не понимаю тогда ты " necesidad" использования " Eloquent". Уже ты это используешь, использовав модели, каждый раз, когда ты использовал любую вещь используешь " Eloquent". ¿ Что для tí использовать " Eloquent"?. Edit: Он делает тебе секунду inserció n, потому что поверьте, у него нет идентификации на которой делать modificació n, если ты даешь ему идентификацию или возвращаешь модель с идентификацией, не creará новый один. – Sakrow 18.10.2016, 13:55
  • 3
    ¿ Те valió ответ? – Sakrow 14.06.2017, 10:08