我如何在相同的字段中使用where()?

时间:2017-06-20 19:29:47

标签: laravel laravel-5 eloquent laravel-eloquent

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

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

其中created_atupdated_at相同。我一无所获。有什么想法解决这个问题吗?

2 个答案:

答案 0 :(得分:5)

请参阅documentation

  

<强> whereColumn

     

whereColumn 方法可用于验证两列是否相等

在您的示例中,它将是:

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

答案 1 :(得分:0)

我认为你被困住的是你如何运行查询。看起来你正试图传递updated_at,但这对数据库没有任何意义。

如果您想要获取表中所有记录的列表,并且只显示完全具有相同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()方法来比较日期。然后我们简单地添加一个!来翻转条件,这样我们就会拒绝那些没有相同创建/更新日期的记录。

希望这有帮助。