簡體   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