Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 雄辩-在where子句中计算日期时间差_Php_Sql_Laravel_Eloquent - Fatal编程技术网

Php 雄辩-在where子句中计算日期时间差

Php 雄辩-在where子句中计算日期时间差,php,sql,laravel,eloquent,Php,Sql,Laravel,Eloquent,我试图检查我的数据库中两列的差异是否在给定的年数下,即DATETIME-BIRTHDATEwhereRaw 编辑 上面的示例仅适用于mysql数据库。 对于SQLITE,条件应为 '(JulianDay(values.datetime) - JulianDay(students.birth)) / 365.25 < ?' 对于PostgreSQL 'EXTRACT(YEAR from AGE(values.datetime, students.birth)) < ?' 在代码

我试图检查我的数据库中两列的差异是否在给定的年数下,即DATETIME-BIRTHDATE<年

我试过了

$result->where(date_diff((strtotime('datetime')-strtotime('student.birth'), '<', $request->search);
和Student.php

在我保存的学生表中:

$table->DateTime('birth');            
在值表中,它是:

$table->DateTime('datetime');
$table->unsignedBigInteger('student_id');
$table->foreign('student_id')->references('id')->on('students');
第二次编辑:

感谢@motia,我编辑了我的代码:

$age = $search->age;
这读取了请求中的年龄,工作得非常好。。但是

    $result = Value::query()
        ->whereHas('student', function($q) use($age) {
        $q->whereRaw(
            'TIMESTAMPDIFF(YEAR, students.birth, values.datetime) < ?', [$age]
            );
        })
        ->get(); 
抛出一个错误,声明:

SQLSTATE[HY000]:一般错误:1没有这样的函数:TIMESTAMPDIFF SQL:select*从存在的值中选择*从学生中选择,其中values.student_id=students.id和TIMESTAMPDIFFYEAR,students.birth,datetime<19


19是我在代码中的age的示例值,在PHP代码中执行条件以过滤表,而不是构建查询并让数据库执行SQL

查询时,应该考虑构建正确的SQL表达式字符串

对于您的情况,您需要的条件表达式不能使用query->where构建,因此您需要使用query->whereRaw

编辑 上面的示例仅适用于mysql数据库。 对于SQLITE,条件应为

'(JulianDay(values.datetime) - JulianDay(students.birth)) / 365.25 < ?' 
对于PostgreSQL

'EXTRACT(YEAR from AGE(values.datetime, students.birth)) < ?' 

在代码中,您正在执行条件以过滤PHP代码中的表,而不是构建查询并让数据库执行SQL

查询时,应该考虑构建正确的SQL表达式字符串

对于您的情况,您需要的条件表达式不能使用query->where构建,因此您需要使用query->whereRaw

编辑 上面的示例仅适用于mysql数据库。 对于SQLITE,条件应为

'(JulianDay(values.datetime) - JulianDay(students.birth)) / 365.25 < ?' 
对于PostgreSQL

'EXTRACT(YEAR from AGE(values.datetime, students.birth)) < ?' 

嗨,你能告诉我你的模型之间的关系吗?你是如何把它们联系起来的?我将帮助您使代码尽可能干净。@motia您好,谢谢!我从模型中添加了关系信息,还有什么有用的吗?嗨,你能告诉我你的模型之间的关系吗?你如何在它们之间建立连接?我将帮助您使代码尽可能干净。@motia您好,谢谢!我从模型中添加了关系信息,还有什么有用的吗?谢谢!我以前从未使用过Model::query,所以我对它的工作原理感到困惑——也没有找到文档。。这个查询现在对我来说似乎是合乎逻辑的,但是我如何执行它呢?对于Eloquent和SQL来说是新手,所以如果这是显而易见的,我很抱歉Model::query中的查询是可选的。如果你不把它说出来,雄辩的人会含蓄地说出来。它应该和你的代码一样。你可以通过再次调用->GetHanks来获得结果!我似乎还是做错了什么。。。我更新了这个问题,如果你能再帮我一次,那就太酷了@Felix,你的数据库没有TIMESTAMPDIFF函数。你在用什么数据库?谢谢!我以前从未使用过Model::query,所以我对它的工作原理感到困惑——也没有找到文档。。这个查询现在对我来说似乎是合乎逻辑的,但是我如何执行它呢?对于Eloquent和SQL来说是新手,所以如果这是显而易见的,我很抱歉Model::query中的查询是可选的。如果你不把它说出来,雄辩的人会含蓄地说出来。它应该和你的代码一样。你可以通过再次调用->GetHanks来获得结果!我似乎还是做错了什么。。。我更新了这个问题,如果你能再帮我一次,那就太酷了@Felix,你的数据库没有TIMESTAMPDIFF函数。你在使用什么数据库?
'EXTRACT(YEAR from AGE(values.datetime, students.birth)) < ?'