Laravel Eloquent在Join Table上

moh*_*Jsh 2 php mysql eloquent laravel-5 laravel-5.1

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

class Foo {

   public function fooTypes(){
    return $this->hasMany('App\FooType');
   }
}
Run Code Online (Sandbox Code Playgroud)

和FooType

class FooType{

   public function foo(){
     return $this->belongsTo('App\Foo');
   }
}
Run Code Online (Sandbox Code Playgroud)

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

我试过的东西:

Foo::fooTypes()->where('type_id', 5);
Run Code Online (Sandbox Code Playgroud)

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

问题二: 我发现这很难用Eloquent查询构建器使用正常的laravel查询与DB 是不好的做法,我的意思是使用db我不能使用orm或类似的东西(或者使用eloquent查询构建器的好处是什么):

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

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

Don*_*ash 11

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

Foo::whereHas('fooTypes', function($query){
    $query->whereTypeId(5);  
})->get();  
Run Code Online (Sandbox Code Playgroud)

对问题2的回答:

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

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

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

Laravel Eloquent vs Fluent查询构建器