2015-12-08 14 views
0

我正在开发一组将由android/iphone应用程序使用的后端API。有些情况下我必须使用超过2或3个表的连接。何时在laravel中使用雄辩模型

例如:

我有一个与它的喜欢,SKU的评论,和类别表相关的产品表。如果我使用预先加载得到的产品表相关联的所有值,它会执行以下查询:

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个查询所有的“*”。如果我需要选择特定的列,我将不得不在模型关系函数中对其进行硬编码,并且它不会是动态的。这会杀死我的应用程序的性能和可伸缩性。

雄辩模型在哪里发挥作用?它是否只是从查询中获得更快的开发和抽象层?或者是否有任何特定的地方可以在不影响性能的情况下使用雄辩的模型?我的理解是,如果我有更多的表格,我最好使用连接而不是口才?

+1

Eloquent是一个orm它是查询数据库的shell。它提供了一种更易于用户阅读的方式来编写查询。你可以用普通查询和连接来完成所有任务。 –

+0

随着口才的提高,你也可以使用 - >选择('field','field')来获得特定的字段。而不是* –

+0

@TimvanUum我将不得不在模型中对其进行硬编码,而且它不是变量。想象一下,有时在我的控制器中,我可能需要desc,有时是product_name,desc,在这两种情况下,我在模型关系函数中指定的颜色会出现在右边吗? – Ajeesh

回答

0

雄辩是一个ORM。这使得用户可以使用客观方法来设置数据,而不用担心如何存储数据。不需要担心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');