如何使用第二张桌子Laravel?

时间:2017-05-04 08:39:35

标签: laravel laravel-5 laravel-5.4

我有以下查询:

$objects = Object::with("prototypes");

正如您所见,我确实要求对Object进行建模并将其与prototypes一起加入。

prototypes表具有结构:

prototype_id
name

如何在上述查询中设置where,如:

$objects = Object::with("prototypes")->where("prototype_id", 3);

对象模型:

  public function prototypes()
 {
     return $this->belongsToMany('App\Prototype', 'object_prototype', 'object_id');
 }

原型模型:

 public function objects(){
   return $this->belongsToMany("App\Object", "object_prototype", "prototype_id", "object_id");
 }

2 个答案:

答案 0 :(得分:3)

如果在您的Eloquent模型中正确设置了关系,则可以使用WhereHas函数查询关系存在。

$objects = Object::with('prototypes')
    ->whereHas('prototypes', function ($query) {
        $query->where('prototype_id', 3);
    })
    ->get();

答案 1 :(得分:0)

添加@Jerodev答案。

  

如果您需要更多电量,可以使用whereHas和   orWhereHas方法放置"其中"你的条件有疑问。   这些方法允许您向a添加自定义约束   关系约束,例如检查评论的内容:

// Retrieve all posts with at least one comment containing words like foo%
$posts = Post::whereHas('comments', function ($query) {
   $query->where('content', 'like', 'foo%');
})->get();

您可以阅读有关Eloquent Relationships

的更多信息

在您的情况下,您还可以构建一个类似的查询。

Object::whereHas('prototypes', function ($query)){
  $query->where('prototype_id', 3);
})->get();