首页 文章

Laravel Eloquent在Join Table上

提问于
浏览
0

我在laravel 5中有两个实体Eloquent,Foo和FooType与oneToMany关系 .

class Foo {

   public function fooTypes(){
    return $this->hasMany('App\FooType');
   }
}

和FooType

class FooType{

   public function foo(){
     return $this->belongsTo('App\Foo');
   }
}

question 1: 如何使用eloquent查询构建器进行查询并返回具有 type_id (此列在FooType表中)为5的Foos;

我试过的东西:

Foo::fooTypes()->where('type_id', 5);

和任何关于这样的查询的好关键的链接 .

question two: 我发现这很难使用Eloquent查询构建器使用normal laravel queries与DB是不好的做法,我的意思是使用db我不能使用orm或类似的东西(或使用eloquent查询构建器有什么好处):

$foos = DB::table('foos')
        ->join('fooTypes', 'foo_id', '=', 'foos.id')
        ->where('fooTypes.type_id', '=', '5')
        ->select('foos.*')
        ->get();

这种类型的查询非常简单,并且有更多关于它的教程 .

1 回答

  • 9

    对问题1的回答:
    在你的情况下使用eloquent orm时可以使用advance where子句,使用可以尝试:

    Foo::whereHas('fooTypes', function($query){
        $query->whereTypeId(5);  
    })->get();
    

    Answer to Question 2:

    “数据映射器”或“查询”构建器比ORM活动记录更快 . 因此,当您编写具有大量并发请求的非常大的应用程序时,Data Mapper / Query Builder就是您的选择 .

    另一方面,ORM为刚开始使用Laravel或正在编写中小型应用程序的人提供了更清晰的语法和更好的代码可读性,其中并发请求的数量不会非常大 .

    查询生成器语法更接近于纯SQL查询,任何使用过数据库和SQL的人都很容易找到它们 .
    因此,您必须根据“查询”构建器语法以及您正在编写的应用程序大小来确定它的选择 .

    Laravel Eloquent vs Fluent query builder

相关问题