2

我正在使用 Eloquent ORM 4 - 没有 Laravel 框架。

正如我所注意到的,这个 ORM 非常接近 Ruby 的“Active Record”。

在我的情况下,我需要一个有很多关系的模型。另外,我需要使用关系搜索这些对象。所以,我必须使用joins

但它使代码加倍。示例

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 中通过现有关系进行连接?如果没有,您如何处理这些棘手的情况?

还有一个问题。如果您需要 2 个或多个连接到一张表,您会怎么做?我的意思是 EAV。

4

1 回答 1

-1

我不确定仅在满足特定条件的情况下才建立关系的 Eloquent 方式,但可以通过查询构建器完成,只需将连接函数传递给闭包即可。这也应该回答你的两个问题。

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');
    });
于 2013-10-29T14:28:10.400 回答