从具有多行的列访问一个数据

时间:2016-12-01 18:21:53

标签: laravel

我怎样才能获得年,月和年与动态数据库分开的一天。(注意,此列有多行。) 数据库数据示例: 2015-08-13, 2016-07-31, 2016年8月2日

public function index()
    {

//scholar_birthday - column name
$bday = Scholar::select('scholar_birthday')->get();
dd($bday);
$date = explode("-", $bday);

$d = $date[2];
$m = $date[1];
$y = $date[0];

<!--Static Data-->  
//$year = '1991';
//$month = '12';
//$day = '19';

$howOldAmI = Carbon::createFromDate($y,$m,$d)->age;

dd($howOldAmI,$bday);
        return view('pages.Index');
    }

此代码无效!希望任何人都可以为我修复此逻辑。

更新的代码:错误“未知或错误的时区([{”scholar_birthday“:”1221-02-13 00:00:00“},” 数据库:标题| scholar_birthday |           价值| 2015-08-13 |
我的数据有问题,还是与phpmyadmin或laravel中的时区设置有关? 这是代码:

public function index()
{       
$bday = Scholar::select('scholar_birthday')->get();
$format = 'y/m/d';
$year = 'y';
$month = 'm';
$day = 'd';
$data = Carbon::createFromDate($year, $month, $day,$bday);

dd($data);
        return view('pages.Index');
    }
}

Update.Dob-separate数据库仅用于试验和错误。我的实际工作是来自其他数据库的Scholar模型。这就是我如何从blade.php保存日期输入 注意:我已将日期输入保存到单个列中的数据库。它是正确的还是我需要将y / m / d保存在单独的列中?但这是我的输入“<input type="date" name="date" class="form-control" >"。所以这将是保存为单列。这样我如何应用您的代码访问数据?

$date = $request->input('date');
        $dob = new Dob;
        $dateOfBirth = Carbon::createFromFormat('Y-m-d',$date,'UTC')
        ->tz('UTC')
        ->toDateString(); // '2014-02-21'
        $dob->date_of_birth = $dateOfBirth;
        $dob->save();
        return view('pages.Ngo.AddDob');

//这是控制器

$bday = Dob::select('date_of_birth')->get();

问题出在这里......

$age = Carbon::createFromDate(,,,$bday)->age;

我想在这里实现的是获得年龄。这里的代码出了什么问题:

$today = Carbon::now()->toDateString();
$bday = Dob::select('date_of_birth')->get();
$age = $bday->diff($today)->age;

错误: 为foreach()提供的参数无效     DD($年龄);

/ database table /

  id 
  2

   date_of_birth               
   2016-12-07 

   created_at  
   2016-12-04 12:47:59 

   updated_at 
   2016-12-04 12:47:59

1 个答案:

答案 0 :(得分:0)

不要通过使用explode()来获取获取特定值的麻烦,而只是将原始日期作为日期对象传递。

在您的模型中(默认情况下,在app / Scholar.php中)添加以下内容:

protected $dates = [
    'created_at',
    'updated_at',
    'deleted_at', // If you are using softDeletes
    'scholar_birthday
];

将列添加到日期变更器后,我们将使用Carbon为我们完成所有繁重的工作。确保在使用Carbon外观的任何地方添加适当的使用声明:

use Carbon\Carbon;

然后,在将生日添加到数据库时,将其添加为Carbon对象,如下所示:

Carbon::createFromDate($year, $month, $day, 'UTC');

保存条目后,要从此对象检索特定的日/月/年,请执行以下操作:

$scholar = Scholar::find($idOfScholar);
$bday    = $scholar->scholar_birthday

Day: $bday->day
Month: $bday->month
Year: $bday->year

这将得到一个。否则,您需要使用foreach()或其他循环机制从一行迭代到另一行。

如果您有其他问题,请告诉我。