什么时候在拉拉威尔中使用一个雄辩的模型


When to use an eloquent model in laravel

我正在开发一组后端API,这些API将被安卓/iphone应用程序使用。在某些情况下,我必须使用超过2或3个表的联接。

例如:

我有一个产品表,它与点赞、SKU、评论和类别表相关联。如果我使用急切加载来获取与products表相关的所有值,它将执行以下查询:

select * from `products` where `products`.`products_id` = '1'
select * from `skus` where `skus`.`products_id` in ('1')
select * from `likes` where `likes`.`products_id` in ('1')
select * from `comments` where `comments`.`products_id` in ('1')

这已经运行了4个全部为"*"的查询。如果我需要选择特定的列,我必须在模型关系函数中对其进行硬编码,并且它不会是动态的。这将破坏我的应用程序的性能和可扩展性。

雄辩的模式在哪里发挥作用?它只是提供了更快的开发和查询抽象层的优势吗?或者有没有什么特定的地方我可以在不影响性能的情况下使用雄辩的模型?我的理解是,如果我有更多的表,我最好使用联接,而不是雄辩?

Eloquent是一个ORM。这使得用户能够使用客观的方法来设置数据,而不必担心数据是如何存储的。不需要担心abbout sql注入等等。但是每个ORM都有一个缺点。在(检索)复杂数据集时,原始SQL在分配案例时要高效得多。您可以执行如下原始sql:
$products = 'DB::table('products')
    ->where('products_id', 1)
    ->join('skus', 'skus.product_id', '=', 'products.product_id')
    ->join('likes', 'likes.product_id', '=', 'products.product_id')
    ->join('comments', 'comments.product_id', '=', 'products.product_id');