当前位置: 首页 > 知识库问答 >
问题:

一直使用Laravel雄辩?

卓学智
2023-03-14

始终使用Laravel Elotent而不是原始SQL有什么好处吗?

我有一个习惯,首先在phpMyAdmin中编写SQL来检查关系,然后将其翻译成雄辩的ORM。

有时,翻译成雄辩的ORM是痛苦和耗时的,尤其是从长而复杂的SQL查询进行翻译。与使用雄辩的ORM相比,我能够用SQL快速编写。

共有2个答案

柴禄
2023-03-14

这没有问题,如果这更适合您,您应该使用原始SQL。Eloquent的目标是简化查询。

你唯一需要注意的就是准备好一切。

经炜
2023-03-14

使用查询生成器最重要的好处是抽象,这通常会导致更少的代码。此外,由于构建器与数据库无关,它允许无缝切换RDBMS,例如从MySQL到PostgreSQL(但这只适用于某些情况,因为有些事情是数据库特定的,不能抽象)。

将它与Eloquent结合使用可以提供将结果转换为Eloquent模型的额外好处,这意味着您可以使用关系、变体、访问器以及Eloquent模型提供的所有其他好处。例如:

$users = DB::select('select * from users');

将返回一个数组的stdClass对象,而以下:

$users = User::all();

将返回一组雄辩的模型,您可以在这些模型上获得关系:

foreach ($users as $user) {
    $user->projects();
}

或进行更改并保存条目:

$user->name = 'Bob Dylan';
$user->save();

这些事情可以通过原始查询方法完成,方法是手动创建一组模型,如下所示:

// Replace the stdClass items with User models
foreach ($users as &$user) {
    $user = new User($user);
}

// Create a Collection with the results
$users = new Illuminate\Support\Collection($users);

但是它增加了已经由雄辩实现的复杂性。

抽象如何导致更少的代码的一个很好的例子是:

User::whereIn('id', [1, 7, 100]);

其代码比等效代码少:

DB::select('select * from users where id in (?)', [implode(',', [1, 7, 100]);

在使用使用用户输入的原始查询时,需要考虑的重要事项是始终使用绑定,以避免SQL注入。

也就是说,在某些情况下,正如您所说的,将查询转换为使用查询生成器是一件痛苦的事情,因为该生成器具有与数据库无关的限制。

使用原始查询没有问题。我通常使用查询生成器的组合来进行更简单的查询,这些查询需要雄辩的模型,而原始查询用于更复杂的操作,在那里不使用DB::原始来代替仅仅使用查询生成器是有意义的。所以考虑到我上面说过的事情,这真的可以归结为偏好。

 类似资料:
  • 我刚刚开始学习LaravelV3,我试图通过创建一个博客来了解eloquent的一对多关系。我的帖子与类别有多对一的关系(每个帖子都链接到一个类别)。 我有以下表格和以下字段: 帖子:id、标题、正文、创建日期、类别id 类别:id、名称 我有以下两种型号: 我想出了如何通过传递类别id来获得所有帖子: 我只是需要帮助,找出如何获得所有的职位,并得到他们的更正类别。因此,在视图中的一天结束时,我可

  • 如何制作一对多访问器? 用户模型: 历史模型: 如果我真的喜欢下面,它将工作。 用户模型: 历史模型: 控制器: 刀片视图: 它起作用了! 但是,我应该怎么做,如果我想要这个: 我喜欢 历史模型: 它不工作! 如果我编码像 它会回来的 此集合实例上不存在属性[happy]。 如果我编码像 它会回来的 未定义的属性:Illumb\Database\Eloquent\Relations\HasMany

  • 我有帖子表和评论表。我想得到所有的帖子与它的评论和以下返回只是帖子有评论: 更新 例如 ID帖 1个职位1 2后2 id post\u id评论 1萨姆勒大学评论 Post::with('comments')只返回有注释的帖子,它只返回第一篇帖子,因为第二篇帖子没有注释,我想获取所有帖子(有注释或没有注释)

  • 在发布这篇文章之前,我做了很多研究。 我得到以下错误时,试图插入一个记录到PostgreSQL使用Laravel雄辩的ORM。 这是错误: 这是数据库表创建模式: 这就是我试图执行的代码: 我创建了一个模型类FbPostShareCount扩展雄辩。 我知道laravel不支持复杂的键,但当我使用MySQL时,这个问题并没有发生

  • 我正在努力使用laravel函数 我的代码在这里: 存储时:公司存储良好,但对于公司人员,它将存储到 Larave Documentations说: 有时,您可能不仅希望保存模型,还希望保存其所有关系。为此,您可以使用推送方法: 怎么了?

  • 如何使用雄辩的ORM在Laravel中执行批量数据库插入? 我想在拉威尔完成这一点:https://stackoverflow.com/a/10615821/600516 但是我得到了以下错误。 SQLSTATE[HY093]:无效参数编号:混合命名参数和位置参数。