繁体   English   中英

Laravel ManyToMany加入条件

[英]Laravel ManyToMany Join On Condition

致大家。

如何在Laravel 5.3中为beforeToMany(多对多)关系在“ join on”上添加条件?

例如,假设这里是具有多对多关系的产品和这些产品的参数。 当我想获取特定产品的所有参数时,就很好了。 我做$product->parameters ,它给了我查询所需的东西:

SELECT
  parameters.*,
  product_parameters.product_id AS pivot_product_id,
  product_parameters.parameter_id AS pivot_parameter_id
FROM parameters
  INNER JOIN product_parameters ON parameters.id = product_parameters.parameter_id
WHERE product_parameters.product_id = 1;

当我想在Parameter上定义一些“全局”标志时出现问题,该标志定义该Parameter应该绑定到每个产品。 使用普通SQL,我要做的就是将条件添加到JOIN 或parameters.global = 1中 ,如下所示:

SELECT
  parameters.*,
  product_parameters.product_id AS pivot_product_id,
  product_parameters.parameter_id AS pivot_parameter_id
FROM parameters
  INNER JOIN product_parameters ON parameters.id = product_parameters.parameter_id OR parameters.global = 1
WHERE product_parameters.product_id = 1;

但是我没有发现是否有正确和干净的方法可以用Laravel做到这一点,以使Eloquent \\ Relation对象能够从函数中获得我需要的其他数据。

我发现了一种“糟糕”的方式,即从查询生成器对象中“获取”所需的联接并向其添加另一个“位置”,但是这种方式非常难看,我不确定它将来是否会正常工作。

这是我尝试执行的操作,几乎可以正常工作(PDO参数数量不正确,但它会生成我需要的SQL):

$relation = $this->belongsToMany(Parameter::class, 'product_parameters');
$relation->getQuery()->getQuery()->joins[0]->where('parameters.definition', '=', 0, 'or');

任何帮助或建议,不胜感激。 谢谢。

我留下了最初的想法,将所有内容放入查询中,尝试执行多个请求并合并生成的Eloquent Collections。 然后我做了一些研究,最后我确定了我要走错的路,最好使用存储库和规范之类的模式来实现所需的逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM