Php 总是用拉威尔的口才?

Php 总是用拉威尔的口才?,php,laravel,eloquent,Php,Laravel,Eloquent,始终使用Laravel Elotent而不是原始SQL有什么好处吗 我有一个习惯,首先在phpMyAdmin中编写SQL来检查关系,然后将其翻译成雄辩的ORM 有时,翻译成雄辩的ORM是痛苦和耗时的,尤其是从长而复杂的SQL查询进行翻译。与使用雄辩的ORM相比,我能够用SQL快速编写。没有问题,如果适合您,您应该使用原始SQL。Eloquent的目标是简化查询 你唯一需要注意的是准备好一切。使用查询生成器最重要的好处是抽象,这通常会减少代码。此外,由于构建器不依赖数据库,因此它允许无缝地切换RD

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

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


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

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


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

使用查询生成器最重要的好处是抽象,这通常会减少代码。此外,由于构建器不依赖数据库,因此它允许无缝地切换RDBMS,例如从MySQL切换到PostgreSQL(但这仅适用于某些情况,因为有些东西是特定于数据库的,无法抽象)

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

$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]);
在使用使用用户输入的原始查询时,需要考虑的重要事项是始终使用绑定,以避免将您自己留给用户


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


使用原始查询没有问题。对于需要雄辩模型的简单查询和需要更复杂操作的原始查询,我通常使用查询生成器和原始查询的组合,其中不在任何地方使用
DB::raw
仅仅是为了使用查询生成器是有意义的。因此,考虑到我上面所说的,这实际上可以归结为偏好。

这个人什么时候有资格获得赏金,我想现在给出这个答案,我认为这是一个非常完整的回答,但不要忘记(从安全角度讲),对于原始SQL,您总是会接触到,但是对于像ORM这样的雄辩,由于所有的SQL调用都是封装的,并且有一个抽象层,所以您几乎可以忘记这个问题。@soutone非常正确,这就是为什么在我的示例中,我展示了使用绑定的原因。但是这很重要,所以我会在我的回答中包括警告。谢谢你指出这一点。