2017-05-15 15 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); 

イムtinkerで同じ$projectsのための空の配列を、取り戻します。はい、雄弁は完璧です。私はそれを正しい方法で行っていますか?

私はここにいるので、私は2つの日付を照会する必要がwhereBetween$from$to、すなわち:

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

Iから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私はそうしましたが、「方法はどこにも存在しません。」私はそれを私のモデルに追加する必要がありますか?申し訳ありません、私はlaravelに新しいです。私は読んでいる。ありがとう – Sylar

答えて

3

をあなたが方法ではなく、プロパティとしてprojectsを指定する必要があります。()なし$user->projectsにアクセスしようとし

$projects = $user->projects()->where('created_at', $newformat)->get(); 

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 ::(...)'はまだ同じです – Sylar

+0

あなたのクエリに問題があるかもしれません。 'created_at'には時、分、秒がありますので、' - > where( "created_at"、$ newFormat) 'は失敗します。 –

+0

正しい。今、私の問題があります – Sylar

1

あなたは試してみてください:

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

$projects = $user->projects()->where('created_at', 'like', $newformat); 
関連する問題