我如何将 where() 用于相同的字段?

How I can use where() for same fields?

当我尝试获取具有相同 created_atupdated_at 的记录时,例如:

->where('created_at','=','updated_at')

其中 created_atupdated_at 相同。我什么也得不到。有解决这个问题的想法吗?

documentation

whereColumn

The whereColumn method may be used to verify that two columns are equal

在您的示例中它将是:

->whereColumn('created_at', 'updated_at')

我认为您遇到的问题是您如何 运行 您的查询。看起来您正在尝试传入 updated_at,但这对数据库没有任何意义。

如果您想获取 table 中所有记录的列表,并且只显示具有完全相同的 created_atupdated_at 列的记录,我会查询所有的记录,然后通过它们并检查。根据您的问题的措辞方式,您没有要检查的硬日期,每个日期都取决于同一记录中的相应日期。

这是一个我将如何做(我认为)你想要的事情的例子:

$users = User::all();

$modifiedUsers = $users->reject(function ($value, $key) {
    return !$value->created_at->isSameDay($value->updated_at);
});

dd($modifiedUsers);

在上面的示例中,我们获取了所有用户,然后我们创建了一个新集合,其中仅包含在同一天创建和修改的用户。 created_atupdated_at 具有两个不同日期值的任何用户都会被我们的新集合 ($modifiedUsers) 拒绝。

reject() 方法的工作方式是将集合中的每个项目传递给回调并对其求值。如果条件是 true,它会从集合中拒绝它。因此,由于我们知道 Laravel 将 created_atupdated_at 转换为 Carbon 的实例,我们可以使用 Carbon 的 isSameDay() 方法来比较日期。然后我们简单地在前面添加一个 ! 来翻转条件,因此我们拒绝没有相同 created/updated 日期的记录。

希望这对您有所帮助。