使用accepted answer here,我想根据created_at
返回所有对象。
$projects = [ {id => 1,..., 'created_at' => "2017-05-15 14:46:32",...}, ]
$time = strtotime('2017-05-15'); // format issue?
$newformat = date('Y-m-d',$time); // "2017-05-15"
$projects = $user->projects->where('created_at', $newformat);
我找回$projects
的空数组,在tinker
中也是如此。是的,雄辩是完美的。我是以正确的方式去做的吗?
由于我在这里,我需要使用$from
查询两个日期,即$to
和whereBetween
:
$projects = $user->projects->whereBetween('created_at', [$from, $to])->toArray();
我无法记住我从哪里看到whereBetween
,但却给了我错误:
$from
和$to
与$newformat
类似。
方法whereBetween不存在。
答案 0 :(得分:3)
您需要指定projects
作为方法,而不是属性:
$projects = $user->projects()->where('created_at', $newformat)->get();
尝试在没有$user->projects
的情况下访问()
将返回Collection
,其中没有whereBetween
方法。你必须使用:
$user->projects()->whereBetween('created_at', [$from, $to])->get();
在那种情况下。请注意Collections
有一个where
方法,但它与Eloquent
的方法不同。
https://laravel.com/docs/5.4/collections#method-where
如果您想查询日期,我发现最好使用whereRaw()
:
$user->project()->whereRaw("DATE_FORMAT(`created_at`, '%Y-%m-%d') BETWEEN '".$from."' AND '".$to."'");
如果只询问一个日期:
$user->project()->whereRaw("DATE_FORMAT(`created_at`, '%Y-%m-%d') = '".$newFormat."'");
我还应该补充说,有一个whereDate()
条款作为上述的简写:
https://laravel.com/docs/5.4/queries#where-clauses
$user->projects()->whereDate("created_at", $newFormat)
还有whereYear()
,whereMonth()
和whereDay()
,可以将其链接起来搜索特定日期。
答案 1 :(得分:1)
你应该尝试:
$newformat = date('Y-m-d',$time).'%'; // "2017-05-15"
$projects = $user->projects()->where('created_at', 'like', $newformat);