У меня есть таблица сообщений с полем изображения, и у меня возникает проблема: когда я пытаюсь вставить это поле, мне нужно заранее проверить, что пользователь опубликовал изображение, и, если это так, вставить его. Это прекрасно работало для меня, когда изображение находилось в отдельной таблице, но если я хочу вставить его рядом с исходным сообщением, я сначала вставляю сообщение, а затем изображение, в которое вставляются 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'];
}
Я думаю, что твоя проблема - что "Модель" не сохраняться
Я помещаю тебе пример, как считаю это я сделанным, и ты говоришь мне, стоит ли он тебе:
$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
та же идентификация и тогда он не создаст новый реестр.