【问题标题】:Laravel Eloquent where on Join TableLaravel Eloquent 在连接表上的位置
【发布时间】:2016-02-18 10:12:20
【问题描述】:

我在 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');
   }
}

问题 1: 如何使用 eloquent 查询生成器进行查询并返回 Foos,其 type_id(此列在 FooType 表中)为 5;

我尝试过的东西:

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

以及任何有关此类查询的好消息的链接。

问题二: 我发现这很难使用 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();

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

【问题讨论】:

    标签: php mysql laravel-5 eloquent laravel-5.1


    【解决方案1】:

    问题 1 的答案:
    在你的情况下使用雄辩的 orm 时可以使用提前 where 子句,使用可以尝试:

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

    问题 2 的答案:

    Data Mapper 或 Query builder 比 ORM Active Record 更快。因此,当您编写具有大量并发请求的大型应用程序时,Data Mapper / Query Builder 是您的最佳选择。

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

    Query Builder 语法更接近于普通的 SQL 查询,任何使用过数据库和 sql 的人都会发现很容易与之相关。
    因此,您必须根据您对查询构建器语法的舒适度以及您正在编写的应用程序的大小来做出选择。

    Laravel Eloquent vs Fluent query builder

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-06
      • 2019-09-06
      • 2023-03-12
      • 2023-04-03
      • 2018-08-07
      • 2021-01-05
      • 2016-07-22
      • 2018-11-06
      相关资源
      最近更新 更多