Laravel MySQL在本地计算机上工作但不是远程计算机

时间:2014-01-03 05:55:19

标签: php mysql laravel

我正在尝试部署我的Laravel(4.1)应用程序,我遇到了与MySQL正常工作的问题。我已经把它缩小到这条线了......

$curSessions = DB::table('sessions')->where('beginDate', '<', $curDate)->where('endDate', '>', $curDate)->get();

我尝试将此更改为以下内容并按预期返回。 (但显然记录太多了)

$curSessions = DB::table('sessions')->where('beginDate', '<', $curDate)->get();

这不起作用。它不返回任何错误和一个空数组。

$curSessions = DB::table('sessions')->where('endDate', '>', $curDate)->get();

然后,当我在phpMyAdmin的SQL框中输入它时,我得到它以回应它所做的最后一个语句(DB::getQueryLog();)和它输出的查询。

要清楚。查询日志显示:

  

array(1){[0] =&gt; array(3){[“query”] =&gt; string(64)“select * from sessions where beginDate&lt;?and endDate&gt;?” [ “绑定”] =&GT; array(2){[0] =&gt; string(8)“2014-1-3”[1] =&gt; string(8)“2014-1-3”} [“time”] =&gt; float(0.26)}}

当我将'2014-1-3'插入“?”时有用。

摩擦是......这适用于运行MAMP的计算机,但不适用于远程服务器。我检查了数据库结构,以确保endDatebeginDate都设置为“日期”,并且它们是。
任何的想法?

2 个答案:

答案 0 :(得分:0)

您只需要确保包含前导0(作为matpop建议)。

答案 1 :(得分:0)

首先,您应该检查您的表日期类型是否与您查询的内容相同。 例如,如果您的表beginDate列是时间戳,那么您的$ curDate变量应该是timestamp的实例。这样做你可以做到:

$curDate = Carbon::createFromDate("year", "month", "day");

然后你可以使用如下所示的雄辩内置的laravel:

$curSessions = Sessions::where('beginDate', '<', $curDate)
            ->where("endDate", ">", $curDate)->get();

仅供参考:还有另一个运营商可以使用whereBetween进行日期时间检查,我在这里举一个示例,以便检查它是否能完成您的工作。

$curSessions = Sessions::whereBetween('beginDate', array($beginDate, $endDate))->first();