Laravel 5.6 сохранить дату и время в базе данных - PullRequest
0 голосов
/ 29 октября 2018

У меня есть вопрос о сохранении даты и времени ввода в Laravel с использованием базы данных mysql. Я пытаюсь сохранить данные в моей базе данных, которые мое поле в базе данных, используя тип dateTime. Я использую datetimepicker для Bootstrap 4, формат ввода которого, например, 30.10.2008, 12:00.

В сообщении об ошибке отсутствуют данные

мой ваучер-контроллер

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Voucher;
use App\Image;
use App\Category;
use Carbon\Carbon;
use App\Merchant;
use Validator;
class AdminVoucherController extends Controller
{
public function __construct()
{
    $this->middleware('auth:admin');
}

public function indexVouchers()
  {
      $vouchers = Voucher::all();
      return view('Admin.Vouchers.Index')->with('Vouchers', $vouchers);
  }




  public function showFormVouchers()
  {
      $category = Category::all();
      $merchant = Merchant::all();
      return view('Admin.Vouchers.Form')->with(['categories' => $category,
      'merchants' => $merchant
      ]);
  }



    public function storeVouchers(Request $request)
    {
        $this->validate($request, [
            'name' => 'required',
            'photos' => 'required',
            'photos.*' => 'image|mimes:jpeg,png,jpg|max:2048',
            'price_normal' => 'required|integer',
            'price_discount' => 'required|integer',
            'amount' => 'required|integer',
            'description' => 'required'

    ]);


    $date = str_replace('.', '-', $request->input('startFrom'));
    // create the mysql date format
    $dateformat= Carbon::createFromFormat('d-m-Y H:i:s', $date);


    $date1 = str_replace('.', '-', $request->input('expiredUntil'));
    // create the mysql date format
    $dateformat1= Carbon::createFromFormat('d-m-Y H:i:s', $date1);

    $voucher = new Voucher();
    $voucher->name = $request->name;
    $voucher->description = $request->description;
    $voucher->start_from = $dateformat;
    $voucher->expired_on = $dateformat1;
    $voucher->value = $request->amount;
    $voucher->merchant_id = $request->merchant;
    $voucher->categories_id = $request->category;
    $voucher->save();





     if($request->hasfile('photos[]'))
     {

        foreach($request->file('photos[]') as $image)
        {
            $name= $this->getFileName($request->photos);
            $image = new Image();
            $image->name = $name;
            $image->move(public_path().'/img/'   .$request->input('merchant') , $name);
            $image->voucher_id = $voucher->id;
            $image->save();
        }
     }

     return response()->json([

        'redirect_url' => route('create.vouchers')
      ]);

    }


    private function getFileName($file)
    {
        $dateNow = Carbon::now();
        $namefile = $dateNow->toDateString();
        return $namefile. '-' .$request->merchant. '.'.$file->extension();
    }
 }

Voucher.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use App\ordered;

class Voucher extends Model
{

protected $fillable = ['name','start_from','expired_on','price_normal','price_discount','status'];

protected $table = 'vouchers';

public function details()
{
    return $this->hasMany(ordered::class);
}

public function categories()
{
    return $this->belongsTo(Category::class);
}

public function setStartFromAttribute($value)
{
    $this->attributes['start_from'] = Carbon\Carbon::createFromFormat('d-m-Y H:i',$value);
}

public function setExpiredOnAttribute($value)
{
    $this->attributes['expired_on'] = Carbon\Carbon::createFromFormat('d-m-Y H:i',$value);
}
}

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Прежде всего, вы должны выяснить, как именно дата отправляется на ваш контроллер.

dd($request->startFrom);

Таким образом, вы можете убедиться, что он действительно публикуется.

Во-вторых, то, как вы используете углерод, немного затянуто. Просто вы можете сделать что-то вроде этого.

$date = Carbon::parse($request->startFrom)->format('d-m-Y H:i:s');

Это отформатирует вашу дату в правильный формат для вас дБ.

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

0 голосов
/ 29 октября 2018

В Laravel вам нужно передать форматированную дату:

public function setStartFromAttribute($value)
{
    $this->attributes['start_from'] = $value;
}

или

$voucher->start_from = $dateformat->format('Y-m-d H:i:s');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...