私はLaravelの初心者です。 laravelでアプリケーションを作成しています。投稿を作成すると、「created_at」と「updated_at」の値は次のようになります。
2014-06-26 04:07:31
2014-06-26 04:07:31
しかし、私はこのような時間のないこの値が欲しいです:
2014-06-26
2014-06-26
時間のない日付のみ。
出来ますか ???
私を助けてください。
私の投稿モデル:
<?php
class Post extends \Eloquent {
protected $fillable = array('title', 'body', 'meta','reporter', 'slug', 'image','top');
public static $rules = array(
'title'=>'required|min:2',
'body'=>'required|min:20',
'reporter'=> 'required|min:2',
'image'=>'image|mimes:jpeg,jpg,bmp,png,gif'
);
public function categories()
{
return $this->belongsToMany('Category');
}
}
My Post Controllerストア:
public function store()
{
$validator = Validator::make(Input::all(), Post::$rules);
if ($validator->passes()) {
$post = new Post;
$post->title = Input::get('title');
$post->body = Input::get('body');
$post->reporter = Input::get('reporter');
$post->meta = Input::get('meta');
$post->slug = Input::get('title');
$post->top = Input::get('top');
$image = Input::file('image');
if ($image) {
$filename = date('Y-m-d-H:i:s')."-".$image->getClientOriginalName();
Image::make($image->getRealPath())->resize(250, 145)->save('public/images/postimages/'.$filename);
$post->image = 'images/postimages/'.$filename;
}
$categories = Input::get('categories');
$post->save();
$post->categories()->sync($categories);
return Redirect::route('admin.posts.index')
->with('message', 'Product Created');
}
return Redirect::back()
->with('message', 'Something went wrong')
->withErrors($validator)
->withInput();
}
私を助けてください。
Post
モデルに、次のような2つのアクセサーメソッドを追加します。
_public function getCreatedAtAttribute($date)
{
return Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $date)->format('Y-m-d');
}
public function getUpdatedAtAttribute($date)
{
return Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $date)->format('Y-m-d');
}
_
これで、モデルからこれらのプロパティを使用して日付を表示するたびに、これらは異なる方法で表示されます。たとえば、時刻のない日付だけです:
_$post = Post::find(1);
echo $post->created_at; // only Y-m-d formatted date will be displayed
_
したがって、データベースの元のタイプを変更する必要はありません。データベースのtype
を変更するには、Date
からTimestamp
に変更する必要があり、移行(使用している場合)または直接移行を使用していない場合はデータベース。 timestamps()
メソッドはこれらのフィールドを追加し(移行を使用)、移行中にこれらのフィールドを変更するには、timestamps()
メソッドを削除し、代わりにdate()
を使用する必要があります。 :
_$table->date('created_at');
$table->date('updated_at');
_
{{ $post->created_at }}
「2014-06-26 04:07:31」を返します
解決策は
{{ $post->created_at->format('Y-m-d') }}
データベースの時間を変更するには、次のコマンドを使用します。 http://laravel.com/docs/4.2/eloquent#timestamps
カスタムタイムスタンプ形式の提供
タイムスタンプの形式をカスタマイズする場合は、モデルのgetDateFormatメソッドをオーバーライドできます。
class User extends Eloquent {
protected function getDateFormat()
{
return 'U';
}
}
https://laravel.com/docs/5.1/eloquent
タイムスタンプの形式をカスタマイズする必要がある場合は、モデルに$ dateFormatプロパティを設定します。このプロパティは、データベースに日付属性を保存する方法と、モデルを配列またはJSONにシリアル化するときの形式を決定します。
class Flight extends Model
{
/**
* The storage format of the model's date columns.
*
* @var string
*/
protected $dateFormat = 'U';
}
このように試すこともできます。
Use Carbon\Carbon;
$created_at = "2014-06-26 04:07:31";
$date = Carbon::parse($created_at);
echo $date->format("Y-m-d");
Laravel 5.3でsimpleソリューションを探している場合:
timestamps()
をそのまま保存します。つまり、 '2016-11-14 12:19:49'ビューで、フィールドを以下のように(または必要に応じて)フォーマットします。
date('F d, Y', strtotime($list->created_at))
私にとってはとてもうまくいきました。
laravel 6では、「APP/user.php」モデルに最新のものを簡単に追加できます。
/**
* The storage format of the model's date columns.
*
* @var string
*/
protected $dateFormat = 'U';
そして、スキーマに追加することができます
$table->integer('created_at')->nullable();
$table->integer('updated_at')->nullable();