我有两个实体在拉瓦夫5雄辩,Foo和FooType与一个女人的关系。

class Foo {

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

和字体
class FooType{

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

问题1:
如何使用雄辩的查询生成器进行查询,并返回type_id(此列位于FooType表中)为5的Foos;
我试过的东西:
Foo::fooTypes()->where('type_id', 5);

以及任何关于像这样的查询的好的tuts链接。
问题二:
我发现这很难使用雄辩的查询构建器,对DB使用normal laravel queries是不是不好,我的意思是使用DB我不能使用orm或类似的东西(或者使用雄辩的查询构建器有什么好处):
$foos = DB::table('foos')
        ->join('fooTypes', 'foo_id', '=', 'foos.id')
        ->where('fooTypes.type_id', '=', '5')
        ->select('foos.*')
        ->get();

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

最佳答案

对问题1的答复:
您可以使用advance where子句在您的案例中使用雄辩的orm时,可以尝试:

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

对问题2的答复:
数据映射器或查询生成器比ORM活动记录快。因此,当您编写具有大量并发请求的非常大的应用程序时,数据映射器/查询生成器是一种方法。
另一方面,ORM为刚开始使用Laravel或正在编写中小型应用程序(并发请求的数量不会很大)的用户提供了更清晰的语法和更好的代码可读性。
查询生成器语法更接近于普通的SQL查询,任何使用过数据库和SQL的人都很容易与之相关。
因此,您必须做出选择,这取决于您对查询生成器语法的适应程度以及您正在编写的应用程序的大小。
Laravel Eloquent vs Fluent query builder

关于php - Laravel Eloquent在联接表上的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35478498/

10-16 15:29