3

我敢肯定这很简单,但我找不到任何例子。

我在我的 Laravel 应用程序中使用 fluent 来记录用户的登录信息,因此我创建了自己的身份验证驱动程序,但是我遇到了混合原始数据和非原始数据的 fluent 查询的问题,请查看以下内容:

DB::table('logins')->insert(array(
    'login_email' => $arguments['email'],
    'login_date' => DB::raw('UNIX_TIMESTAMP(NOW())'),
    'login_ip'=> DB::raw('INET_ATON('.$_SERVER['REMOTE_ADDR'].')'),
    'login_result' => (bool)$success
));

什么导致:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@gmail.com, UNIX_TIMESTAMP(NOW()), INET_ATON(127.0.0.1), ?)' at line 1

SQL: INSERT INTO `cs_logins` (`login_email`, `login_date`, `login_ip`, `login_result`) VALUES (?, UNIX_TIMESTAMP(NOW()), INET_ATON(127.0.0.1), ?)

Bindings: array (
  0 => false,
)

所以我做了以下事情:

DB::table('logins')->insert(array(
    'login_email' => DB::raw("'".$arguments['email']."'"),
    'login_date' => DB::raw('UNIX_TIMESTAMP(NOW())'),
    'login_ip'=> DB::raw('INET_ATON('.$_SERVER['REMOTE_ADDR'].')'),
'login_result' => DB::raw((bool)$success)
));

但正如 Dayle Rees 所说,如果它看起来很丑,它不在框架中......所以我想知道我在这里缺少什么。

4

2 回答 2

3

使用雄辩

首先,如果还没有完成,为Login创建一个模型,这样你就可以使用 laravel 自己的 ORM eloquent了。Eloquent 允许您以非常富有表现力的方式编写简单而强大的查询。

现在您可以执行以下两个选项之一:

$logins = Login::create(array('email' => 'example@gmail.com'));

或者,在您的情况下可能更优雅:

$login = new Login;

$login->email = 'example@gmail.com';
$login->login_date = DB::raw('UNIX_TIMESTAMP(NOW())');

$login->save();

有关更多信息,请参阅eloquent 文档

于 2012-12-20T21:28:55.103 回答
0

好吧,别介意它看起来像“?” 问号只是意味着流利的没有达到创建准备好的陈述的那部分。我是 Laravel 和 Fluent 的新手,我认为问号表示错误出现在查询的那部分。

于 2012-12-20T21:06:54.977 回答