雄辩的ORM - 按现有关系加入

时间:2013-10-29 14:00:00

标签: mysql join orm laravel eloquent

我正在使用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。

1 个答案:

答案 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');
    });