【问题标题】:Laravel Eloquent Model with multiple IDs具有多个 ID 的 Laravel Eloquent 模型
【发布时间】:2018-04-27 01:10:07
【问题描述】:

我将有一个包含其他表(关系)的信息的表。此表中的大部分信息将只有引用相关表的 ID。如果我使用“产品”作为此表的示例,它的某些列可能看起来像这样:

id  |  name  |  type_id  |  price_id  |  location_id  |  sale_id
----------------------------------------------------------------
 1  |  prod1 |     1     |      1     |       2       |     4
 2  |  prod2 |     2     |      1     |       1       |     1
 3  |  prod3 |     3     |      2     |       6       |     2
 4  |  prod4 |     1     |      2     |       3       |     4

我正在尝试获取此“产品”表并将其转储到列表中。当我将其转储(关系)时,我需要查找这些列中的所有项目。我知道怎么做belongsToMany 和hasMany,但是如果我有一个“产品”模型,我不确定如何用一个Eloquent 模型一次性做到这一点?我应该只将产品表设为数据透视表吗?我可以使用 Eloquent 模型还是应该直接使用查询生成器?我想如果我使用 withPivot 它会返回额外的列,但会返回列中的原始 ID 值。我需要从他们各自的表(关系)中查找值。

试过这样的:

public function productItems(){
  return $this->belongsToMany(Product::class)->withPivot(["type_id","price_id",...]);
}

【问题讨论】:

  • 你尝试过什么?你的模型看起来怎么样?你在 laravel 中检查过eager loading 吗?
  • 见上面的编辑。
  • err,你能发布你的Product 模型吗?还有,这个productItems() 在哪里?上表是代表Product还是别的什么?
  • 看了你的问题2遍,不明白你想要什么。但我认为你可以更容易地了解 EAV 模型来设计产品表结构。

标签: laravel


【解决方案1】:

正如@BagusTesa 所建议的,您应该急切地加载您的关系:

$products = Product::with(['type', 'price', 'location'])->get();

这将查询相关模型,允许您将它们作为模型属性访问:

foreach ($products as $product){
    // $product->type;
    // $product->price;
    // $product->location;
}

【讨论】:

  • 为了回答上面的问题,公共函数 productItems() 将在“商店”模型下。我在哪里获得特定商店的产品列表。如果我进行急切加载,我假设我必须为要查找的每一列都有模型?因此,对于 Products 模型,我将为每种类型、价格、位置等提供关系函数,无论它可能是什么......belongsToMany、belongsTo 等。
  • 是的,为了 eloquent 建立关系,您需要一个代表类型、价格、位置等的模型,并在产品模型上具有适当的关系函数,而在其他模型上的每个反函数连接回产品.
  • 是的,我相信我现在明白了。我将其编码并测试。我一直在思考枢轴枢轴枢轴,完全忘记了急切加载。无论如何,我可能想用一个相当大的列表来做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 2023-02-24
  • 2021-06-05
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
相关资源
最近更新 更多