【问题标题】:Laravel 8 Foreign Key relationship in eloquent issueLaravel 8 雄辩问题中的外键关系
【发布时间】:2021-02-02 15:20:15
【问题描述】:

我有非常简单的两张桌子

1. products (id,name)
2. adjustment (id,product_id,amount)

所有表都有外键,模型定义如下

class Product model have

public function adjustment()
{
 return $this->hasMany(Adjustment::class);
}

and class Adjustment model have

public function product()
{
return $this->belongsTo(Product::class);
}

现在我想查询调整模型

Adjustment::with('product')->get();

我得到了调整表的结果,但没有得到产品表的结果。 我在这里做错了什么?

【问题讨论】:

  • 您是否遇到错误或任何问题?

标签: laravel eloquent-relationship


【解决方案1】:

您正在执行错误的查询。你可以试试这个:

$products = Product::with('adjustment')->get();

然后访问调整记录。你可以这样做:

foreach($products as $product){
    foreach($products->adjustment as  $adjustment){
       //do your stuff
    }
}

如果你真的想查询调整的产品。你可以这样做:

$product=Adjustment::find(1)->product;

【讨论】:

  • 我想获取调整记录而不是产品记录,谢谢
  • 怎么样?反转你能解释一下吗
  • 根据你的模式结构:你也不能恢复你的父子关系。对不起我之前的评论。如果您阅读 Eager loading 的文档,您可以看到它将 N+1 查询问题简化为一个查询。这意味着如果您有 1 个父行和 N 个子行,您可以将此 N+1 查询加载到 1 个查询中。这就是我在回答中所做的。你有很多调整的产品。但是对于一次调整,您只有一种产品。忽略急切加载。您可以简单地使用其 id 或使用 where 子句查询调整。
  • 可以像这样查询父模型:Adjustment::find(1)->products;
  • 我已经更新了我的答案。如果这对您有帮助,请告诉我
猜你喜欢
  • 2019-03-17
  • 2014-10-18
  • 2019-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-25
相关资源
最近更新 更多