我如何将 where() 用于相同的字段?
How I can use where() for same fields?
当我尝试获取具有相同 created_at
和 updated_at
的记录时,例如:
->where('created_at','=','updated_at')
其中 created_at
和 updated_at
相同。我什么也得不到。有解决这个问题的想法吗?
whereColumn
The whereColumn method may be used to verify that two columns are equal
在您的示例中它将是:
->whereColumn('created_at', 'updated_at')
我认为您遇到的问题是您如何 运行 您的查询。看起来您正在尝试传入 updated_at
,但这对数据库没有任何意义。
如果您想获取 table 中所有记录的列表,并且只显示具有完全相同的 created_at
和 updated_at
列的记录,我会查询所有的记录,然后通过它们并检查。根据您的问题的措辞方式,您没有要检查的硬日期,每个日期都取决于同一记录中的相应日期。
这是一个我将如何做(我认为)你想要的事情的例子:
$users = User::all();
$modifiedUsers = $users->reject(function ($value, $key) {
return !$value->created_at->isSameDay($value->updated_at);
});
dd($modifiedUsers);
在上面的示例中,我们获取了所有用户,然后我们创建了一个新集合,其中仅包含在同一天创建和修改的用户。 created_at
和 updated_at
具有两个不同日期值的任何用户都会被我们的新集合 ($modifiedUsers
) 拒绝。
reject()
方法的工作方式是将集合中的每个项目传递给回调并对其求值。如果条件是 true
,它会从集合中拒绝它。因此,由于我们知道 Laravel 将 created_at
和 updated_at
转换为 Carbon 的实例,我们可以使用 Carbon 的 isSameDay()
方法来比较日期。然后我们简单地在前面添加一个 !
来翻转条件,因此我们拒绝没有相同 created/updated 日期的记录。
希望这对您有所帮助。
当我尝试获取具有相同 created_at
和 updated_at
的记录时,例如:
->where('created_at','=','updated_at')
其中 created_at
和 updated_at
相同。我什么也得不到。有解决这个问题的想法吗?
whereColumn
The whereColumn method may be used to verify that two columns are equal
在您的示例中它将是:
->whereColumn('created_at', 'updated_at')
我认为您遇到的问题是您如何 运行 您的查询。看起来您正在尝试传入 updated_at
,但这对数据库没有任何意义。
如果您想获取 table 中所有记录的列表,并且只显示具有完全相同的 created_at
和 updated_at
列的记录,我会查询所有的记录,然后通过它们并检查。根据您的问题的措辞方式,您没有要检查的硬日期,每个日期都取决于同一记录中的相应日期。
这是一个我将如何做(我认为)你想要的事情的例子:
$users = User::all();
$modifiedUsers = $users->reject(function ($value, $key) {
return !$value->created_at->isSameDay($value->updated_at);
});
dd($modifiedUsers);
在上面的示例中,我们获取了所有用户,然后我们创建了一个新集合,其中仅包含在同一天创建和修改的用户。 created_at
和 updated_at
具有两个不同日期值的任何用户都会被我们的新集合 ($modifiedUsers
) 拒绝。
reject()
方法的工作方式是将集合中的每个项目传递给回调并对其求值。如果条件是 true
,它会从集合中拒绝它。因此,由于我们知道 Laravel 将 created_at
和 updated_at
转换为 Carbon 的实例,我们可以使用 Carbon 的 isSameDay()
方法来比较日期。然后我们简单地在前面添加一个 !
来翻转条件,因此我们拒绝没有相同 created/updated 日期的记录。
希望这对您有所帮助。