Laravel - 代码审查

时间:2015-09-17 01:40:22

标签: php laravel-4

我正在php Laravel项目中进行代码审查。我仍然是相对较新的框架。我已经使用它大约1.5年了。我不知道所有的内部工作,需要一些建议。我觉得我对php有很好的处理能力。我的问题是下面的代码。在PHP中,我会使用PDO和绑定参数的一切,这个代码似乎缺少它。有安全问题吗?这是在Laravel 4.2中。

try {
    $stmt = DB::select('SELECT a.email, a.zipcode, a.is_subscribed, b.no_longer_available, b.reduced_price,b.newly_listed
                          FROM users a INNER JOIN user_preferences b ON (a.user_id = b.user_id)
                          WHERE a.user_id = "' . $this->user->user_id . '";');
} catch (Exception $e) {
    return FALSE;
}

您可以看到字符串在函数中而未绑定。在laravel中,不应该使用像DB :: select($ sql,$ params)这样的东西吗?

第二个问题:下面的代码是否甚至是有效的Laravel代码?我找不到任何文件。

$sql = "UPDATE users a INNER JOIN user_preferences b ON a.user_id = b.user_id
            SET a.is_subscribed = '$is_subscribed',b.no_longer_available = '$no_longer_available',
                b.reduced_price = '$reduced_price', b.newly_listed = '$newly_listed'
            WHERE a.user_id = '$user_id';";

try 
{
    $stmt = DB::update($sql);
    $count = count($stmt);
} catch (Exception $e) {
    return FALSE;
}

假设所有这些$变量都有效。

is: $stmt = DB::update($sql); even a valid Laravel function/method

1 个答案:

答案 0 :(得分:2)

你以非常艰难的方式做到这一点。 Laravel的设置方式应该考虑对象的所有内容。这是一种新的思维方式。

所以,显然有一个User对象。然后,您可以创建更多对象并定义它们之间的关系。例如,您可以创建一个新模型,并将其命名为“偏好”。使用包含'user_id', 'preference_name', 'preference_value'的匹配表。

然后你可以在用户模型中定义关系,如下所示:

public function preferences() {
    return $this->hasMany('App/Preference');
}

现在您只需使用$user = User::find(1);抓取用户,其中1将是用户ID。然后你可以使用$user->preferences(),这将返回该用户的所有首选项。不需要SQL。 TADA! (或者您可以在“用户”表中添加所有首选项,但这是“蹩脚”)

我真的希望这有助于你理解。

如果您想了解更多信息,我实际上是在youtube上发布了一个系列。

如果需要,请查看 - Learn Laravel