2017-05-15 58 views
1

使用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$towhereBetween

$projects = $user->projects->whereBetween('created_at', [$from, $to])->toArray(); 

我不记得在那里我看到从whereBetween但给我的错误: $from$to会类似于$newformat

Method whereBetween does not exist.

+0

'$ projects = $ user-> projects-> whereBetween('created_at',[$ from,$ to]) - > get();'你试过这个吗? –

+0

https://laravel.com/docs/5.2/queries#where-clauses –

+0

@QuỳnhNguyễn我,是的,我已经尝试过,但不断收到'方法whereBetween不存在。我需要将它添加到我的模型吗?对不起,我是laravel的新手。我有一个阅读。谢谢 – Sylar

回答

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(),这可能是链接到搜索特定的日期。

+0

嗨。但是在修补程序中'App \ Project :: where(...)'仍然是一样的 – Sylar

+0

可能是您的查询问题。 'created_at'上有Hours,Minutes和Seconds,所以' - > where(“created_at”,$ newFormat)'会失败。 –

+0

正确。这就是我的问题现在 – Sylar

1

你应该尝试:

$newformat = date('Y-m-d',$time).'%'; // "2017-05-15" 

$projects = $user->projects()->where('created_at', 'like', $newformat); 
相关问题