Php 如果我已经在使用PDO,那么将SELECT查询进一步抽象为Laravel雄辩的ORM有什么好处?

Php 如果我已经在使用PDO,那么将SELECT查询进一步抽象为Laravel雄辩的ORM有什么好处?,php,pdo,laravel-4,orm,eloquent,Php,Pdo,Laravel 4,Orm,Eloquent,考虑以下读写查询: 阅读 写 我将每个写插入/更新操作放入我自己的集中存储库类中,并使用class->方法调用它们,如上所示。 如果我发现自己反复使用一个查询,我可能会决定将一些读取查询放入存储库类中。我必须小心这一点,因为我倾向于返回并稍微调整read查询,以便在我的应用程序的特定区域中获得更多或更少的数据。 我的许多读取查询都是来自可过滤和可排序的数据网格的动态查询。 读取查询通常具有复杂的内容,如总和、计数、排序、分组、组合键等。 既然我的阅读内容如此多样化,为什么我需要将它们进一步抽象为

考虑以下读写查询:

阅读

我将每个写插入/更新操作放入我自己的集中存储库类中,并使用class->方法调用它们,如上所示。 如果我发现自己反复使用一个查询,我可能会决定将一些读取查询放入存储库类中。我必须小心这一点,因为我倾向于返回并稍微调整read查询,以便在我的应用程序的特定区域中获得更多或更少的数据。 我的许多读取查询都是来自可过滤和可排序的数据网格的动态查询。 读取查询通常具有复杂的内容,如总和、计数、排序、分组、组合键等。
既然我的阅读内容如此多样化,为什么我需要将它们进一步抽象为Laravel的雄辩的ORM或任何ORM,特别是因为我使用的是PDO,它有12个不同的数据库驱动程序?目前我能看到的唯一优势是,如果我想重命名一个数据库字段,那么使用ORM将更容易做到这一点。不过,我不愿意为此付出更抽象/更隐晦的代价

我刚刚完成了一个PDO/SQL项目的大量工作,并进入了一个复杂的PDO/SQL项目。现在我搬家了,我忘了ORM是多么容易制造东西,主要是因为自动完成。我的开发流量和速度感觉更好。抽象掉SQL/connections/prepare等也不错。如果您的查询经常很复杂,那么您可能不会从中受益,但是大多数项目90%的时间都可以用ORM的方式完成任务,其余的可以用SQL完成。ORM通常也有助于迁移。我不知道雄辩是否能提供这些优势——但我总体上支持ORM。我认为你不必使用它们。你可能会发现Laravel鼓励这样做——一些框架假设你使用捆绑的ORM,如果你不这样做,那可能会很痛苦。我将留给Laravel用户来回答。你是对的,它很好地抽象了连接,并准备了Laravel所做的事情。但这不是问题所在。我仍然在传递一个大的SQL字符串。关于迁移,我可以再次将它们写入Laravel中的迁移文件中,因此仍然不适用于需要ORM。Laravel允许我使用连接/准备/迁移的好处,并且仍然传递原始选择查询。但是,如果我也将其用于查询,那么它将变得不必要地抽象。对我来说,用SQL思考更容易。写一个查询也不会花很多时间。这些表是以合理的方式创建的。ORM通常会执行其他不必要的查询,例如在执行任何其他工作之前获取记录的查询,或者执行效率低下的操作,例如select中的include*all字段。谢谢你在这里的承诺!
// Retrieves a person (and their active game score if they have one)
$sql = "SELECT CONCAT(people.first_name,' ',people.last_name) as 'name',
               people.uniform as 'people.uniform',
               games.score as 'games.score'
        FROM my_people as people
        LEFT JOIN my_games as games ON(games.person_id = people.id AND games.active = 1)
        WHERE people.id = :id";
$results = DB::select(DB::raw($sql),array("id"=>$id));
 // Saves a person
 $person = new People;
 $person->data = array('first_name'=>$input['first_name'],
                       'last_name'=>$input['last_name'],
                       'uniform'=>$input['uniform']);
 $personID = $person->save();

 // Save the game score
 $game = new Games;
 $game->data = array('person_id'=>$personID,
                     'active'=>$input['active'],
                     'score'=>$input['score']);
 $game->save();