我通常创建一个存储库目录来存储我对控制器的所有查询。我的问题是,雄辩的模型或db :: facade哪个更好使用?
通常在我的整个项目中,我都会同时使用这两个项目,但有时看起来很混乱:
public function getUsersLanguagues($user_id)
{
$query = DB::table('languages as l')
->select('l.name')
->leftJoin('language_user as lu', 'l.id', '=', 'lu.language_id')
->where('lu.user_id', $user_id)
->get();
return $query;
}
public function getUsersLanguagues($user_id)
{
return Languages::select('languages.name')
->leftJoin('language_user as lu', 'languagues.id', '=', 'lu.language_id')
->where('lu.user_id', $user_id)
->get();
}
我确实知道它们都会带回不同种类的对象,集合等,但是我想知道哪种是最好的使用方法,还是推荐的使用方法。提前致谢。
在提供的示例中,没有明显的区别。最后,您只使用共享许多特征的数据库查询生成器和雄辩的查询生成器。实际上,Eloquent通过许多方法注入了数据库的查询生成器。
将每个Eloquent模型视为一个强大的查询构建器,使您可以流畅地查询与该模型关联的数据库表。
我认为它们之间最重要的区别之一是您可以从与Eloquent的关系中获取数据的方式:
# An example adapted to your needs
LanguagesUsers::where('user_id', $user_id)->first()->languages
如果您愿意,可以通过这种方式完成相同的操作:
# languages_users is the name you may give to your relation in your model
Languages::whereHas('languages_users', function ($query) {
$query->where('user_id', $user_id);
})->get();
因此,至少从我的角度来看,Eloquent比加入更富有表现力。
这只是我看到的更重要的区别,但是Eloquent在较简单的数据库的Query Builder上提供了很多好处。为此,我建议您尽可能使用Eloquent。
最后,请注意,从laravel 5.3开始,数据库的查询生成器将返回collection,与Eloquent相同。这样就不再有区别了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句