Laravel / Eloquent做相关搜索的最佳方式

时间:2017-01-13 12:13:45

标签: laravel laravel-5 eloquent

当您想要查询与模型相关的模型关系时,在Laravel / Eloquent中执行相关查询的最佳/正确方法是什么。

例如: 书籍有很多印刷品 印刷有一个出版商

我想查找给定发布商的所有图书。

XmlTextWriter writer = new XmlTextWriter(filePath, Encoding.UTF8);
w.Formatting = Formatting.Indented; 

有关如何设置的任何建议吗?

由于

更新

是否无法在模型中进行设置,使用hasMany / ManyThrough创建" magic"吸气剂?

模型看起来像这样

书籍  - ID   - 标题

打印  - ID   - book_id   - publisher_id   - author_id

出版商  - ID   - 姓名

作者  - ID   - 姓名

2 个答案:

答案 0 :(得分:1)

首先设置正确的关系。 Book有很多PrintingPrinting属于Publisher

Book::whereHas('printings', function($q) use($id) {
    $q->where('publisher_id', $id);
})->get();

答案 1 :(得分:0)

通常这样做:

Books::with(['printings' => function ($q) use ($id) {
    // Query on the relationship
    $q->where('publishers', $id);
}])->get();

修改

我误解了这个问题。正如@AlexeyMezenin回答的那样,你要找的是->whereHas

Books::whereHas('printings', function ($q) use ($id) {
    // Query on the relationship
    $q->where('publishers', $id);
})->get();