0

指定した日に作成されたすべてのユーザーを取得したい:

// $date is a Carbon instance parsed from command line argument.
// I checked it and it is correct.

$users = User::where('created_at', '>', $date->startOfDay())
    ->where('created_at', '<', $date->endOfDay())
    ->get();

しかし、これは 0 の結果を返しますが、データベースにはその日付に対応する行があります。

私は何を間違っていますか?

4

3 に答える 3

2

Carbon値オブジェクトのように動作しない (つまり、不変ではない) ため、次のようになります。

$date->startOfDay();
$date->endOfDay();

オブジェクトを変更して$date戻すだけです。そうは言っても、クエリに渡される文字列は、がすでにに変更PDOされている場合に、準備されたステートメントでそれをバインドするときに取得されます。$dateendOfDay

これは、オブジェクトへの参照を渡すだけであることを意味します。

$start === $end; // true

したがって、別のオブジェクトを使用します。

$users = User::where('created_at', '>', $date->copy()->startOfDay())
  ->where('created_at', '<', $date->copy()->endOfDay())
  ->get();

Carbonまたは、オブジェクトの代わりに必要な文字列を返すだけです:

$users = User::where('created_at', '>', $date->startOfDay()->toDateTimeString())
  ->where('created_at', '<', $date->endOfDay()->toDateTimeString())
  ->get();

それでも、タイムスタンプ$dateが保持されるxxxx-xx-xx 23:59:59ようになったため、この変数を別の場所で使用する必要がある場合に備えて、これを覚えておいてください。

于 2014-10-07T15:44:27.403 に答える
0

クエリでは、テーブル名を残します。

$users = DB::table('users')
                ->where('votes', '>', 100)
                ->orWhere('name', 'John')
                ->get();

見てください:http://laravel.com/docs/4.2/queries#selects

于 2014-10-07T08:40:47.350 に答える