2016-02-18 6 views
0

У меня есть два объекта в laravel 5 Красноречивый, Foo и FooType с отношением oneToMany.Laravel Eloquent где на Join Table

class Foo { 

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

и FooType

class FooType{ 

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

вопрос 1: как можно запросить, используя красноречивый конструктор запросов и возврата Foos, что имеет type_id (этот столбец в таблице FooType) 5;

то, что я пробовал:

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

и любые ссылки на хороший Tuts о запросах, как это.

вопрос два: я узнаю, что это трудно использовать Красноречивый конструктор запросов это плохая практика, чтобы использовать normal laravel queries с БД, я имею в виду с помощью БД я не могу использовать ORM или что-то подобное (или то, что есть преимущества использование красноречивого построителя запросов):

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

этот типа запросы являются очень легкими и там больше учебников об этом.

ответ

9

Ответ на вопрос 1:
Вы можете использовать заранее, где положение при использовании красноречивый ОРМ, как в вашем случае, использование может попробовать:

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

Ответ на вопрос 2:

Data Mapper или построитель запросов быстрее, чем активная запись ORM. Поэтому, когда вы пишете очень большие приложения со значительным количеством одновременных запросов, тогда Data Mapper/Query Builder - это путь.

С другой стороны, ORM обеспечивает более чистый синтаксис и лучшую читаемость кода для тех, кто только что начал с Laravel или пишет небольшое или среднее приложение, где количество параллельных запросов не будет значительно большим.

Синтаксис Query Builder приближен к простым SQL-запросам, с которыми легко справиться каждый, кто работал с базами данных и sql.
Итак, ваш выбор, который вы должны сделать в зависимости от вашего комфорта с синтаксисом Query builder, а также размером приложения, которое вы пишете.

Laravel Eloquent vs Fluent query builder