我正在使用Eloquent ORM 4 - 没有Laravel Framework。
正如我所注意到的,这个ORM非常接近Ruby的“Active Record”。
在我的情况下,我需要有一个有很多关系的模型。此外,我需要搜索此对象与关系。所以,我必须使用加入。
但它会使代码翻倍。 示例:
public function colors()
{
return $this->belongsToMany('Color', 'products_colors', 'product_id', 'color_id');
}
public function scopeJoinColors()
{
return $this->join('product_colors', 'products.id', '=', 'products_colors.product.id')
->join('colors', 'product_colors.color_id', '=', 'colors.id')
}
这样有很多相同的东西。 事实上,我需要以同样的方式限制关系和加入:
...->where('products_colors.published', '=', 1)
所以,问题 Eloquent是否有可能通过现有关系加入? 如果没有,你如何应对这些棘手的情况?
又一个问题。 如果你需要两个或多个连接到一个表,你会怎么做?我的意思是EAV。
答案 0 :(得分:-1)
我不确定只有在满足某个条件的情况下才能建立关系的Eloquent方法,但它可以通过查询构建器完成,只需将join函数传递给闭包即可。这也应该回答你的两个问题。
return $this->join('product_colors', 'products.id', '=', 'products_colors.product.id')
->join('colors', function($join)
$join->on('colors.published','=','1');
$join->on('colors.id', '=', 'products.color_id');
});