【问题标题】:Laravel 5.5 - How to fetch related products in many to many relationLaravel 5.5 - 如何在多对多关系中获取相关产品
【发布时间】:2018-01-23 08:25:49
【问题描述】:

我正在开发一个电子商务网站。

我有 3 张桌子

1.产品表

2.条件表

3.condition_product 表

  • 一个产品可以有很多条件。
  • 许多产品都有特定的条件。

现在我有一个属于 3 个条件的产品。

我想获取属于这三个条件的所有相关产品。

我怎样才能做到这一点?

product.php

public function conditions(){

    return $this->belongsToMany(Condition::class)->withTimestamps();

}

condition.php

public function products(){

    return $this->belongsToMany(Product::class)->withTimestamps();

}

这是我的代码:

 public function productDetails(Product $product)
{
    $a = $product->id;

   $relatedProducts = Product::whereHas('conditions.products', function($q) use($a) {
        $q->where('id', $a);
    })
        ->get();


    return view('pages/product', compact('product','relatedProducts'));
}

但我遇到了错误。

【问题讨论】:

  • 您遇到的错误是什么?将其包含在您的问题中,这将有助于其他人更好地理解
  • 这真的是你的完整代码吗??
  • 我在顶部添加了错误截图。

标签: laravel laravel-5.5


【解决方案1】:

对嵌套关系使用whereHas() 方法:

Product::whereHas('conditions.products', function($q) use($productId) {
    $q->where('id', $productId);
})
->get();

这将为您提供具有指定产品条件的产品。

或者,您可以这样做:

$conditionIds = Product::find($productId)->conditions->pluck('id');
$products = Product::whereHas('conditions', function($q) use($conditionIds) {
    $q->whereIn('id', $conditionIds);
})
->get();

【讨论】:

  • SQLSTATE[23000]:违反完整性约束:1052 where 子句中的列 'id' 不明确。我收到这样的错误
  • @Abhilash.k.p 你说的是第一个解决方案吗?刚刚在 5.3 中尝试过,工作正常。另外,请确保您不要修改代码。只需复制粘贴即可使用。
  • 是的,对于第一个解决方案,我遇到了那个错误,我使用的是 5.5
  • @Abhilash.k.p 我认为他们在 5.3 和 5.5 之间没有改变。请在收到错误时显示您正在使用的实际代码。
  • 如果 id 不明确,试试 $q->where('products.id', $productId);或者问题是什么
【解决方案2】:

一个好的做法是始终指定“id”字段也引用的女巫表,因为如果没有,它可以同时引用“条件”表或“产品”表的“id”字段:

$relatedProducts = Product::whereHas('conditions.products', function($q) use($a) {
        $q->where('products.id', $a);
    })
    ->get();

你可以看到这个answer 关于 SQL 不明确的列名。

【讨论】:

    猜你喜欢
    • 2018-03-16
    • 1970-01-01
    • 2019-02-02
    • 2018-06-11
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 2018-08-01
    • 2016-10-03
    相关资源
    最近更新 更多