Laravel 5.2雄辩

卡洛斯

我通常创建一个存储库目录来存储我对控制器的所有查询。我的问题是,雄辩的模型或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();
    }

我确实知道它们都会带回不同种类的对象,集合等,但是我想知道哪种是最好的使用方法,还是推荐的使用方法。提前致谢。

an

在提供的示例中,没有明显的区别。最后,您只使用共享许多特征数据库查询生成器雄辩的查询生成器实际上,Eloquent通过许多方法注入了数据库的查询生成器。

Laravel 5.2官方文档中

将每个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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章