【问题标题】:Laravel: relation between modelsLaravel:模型之间的关系
【发布时间】:2015-08-11 20:12:41
【问题描述】:

我正在尝试通过一个模型来获取另一个模型的数据。 该应用有几个模型:

产品:有很多部分(小,中)
分量:有许多分量成分(ingredient_id - 100g 或 10 个)
部分成分:有很多成分(培根,奶酪)
成分:有许多翻译(3 种语言)

产品表

id
category_id
product_name

部分表

id
product_id
portion_name
portion_weight

部分成分

id
portion_id
ingredient_id
amount

成分

id
base_unit
transaction_unit
multiplier

我已经尝试在模型中与 hasMany 和 belongsTo 建立关系,但没有成功。我正在尝试获取一部分产品的所有成分。任何想法都值得赞赏。

谢谢!

【问题讨论】:

  • 我不是 laravel 专家,只是一个建议,你尝试过 has-many-through 吗? laravel.com/docs/4.2/eloquent#has-many-through
  • @Xiabili :感谢您的建议,但是 hasManyThrough 可以在 3 个模型之间建立关系。问题是我需要获取 4 个模型的数据。 (在某些情况下我需要通过 5-6 个模型)
  • 从 laravel 文档中,我找不到任何可以让您通过 5 或 6 个模型的函数,到目前为止,我认为您应该使用查询生成器在这些表之间构建连接查询...像这样:成分::join('portion_ingredients as pi', 'pi.ingredient_id', '=', 'ingredients.id')->join('portions', 'portions.id', '=' , 'pi.portions_id')->where('portions.product_id', 2)->get(); (不确定是否工作,尚未测试)
  • 您需要像@Xiabili 上面所说的那样构建一个查询。使用 Laravel 的 ORM 无法通过这么多模型直接访问关系。实际上,我不知道是否有任何 ORM 会让你做这样的事情。无论如何,使用查询生成器可能比通过关系方法访问对象有更好的查询。有关详细信息,请参阅以下链接:laravel.com/docs/4.2/queries

标签: laravel laravel-4


【解决方案1】:

如果模型之间的关系设置正确,类似这样:

// models/Product.php
class Product extends Model
{
    public portions() {
        return $this->hasMany("Portion");
    }
}

// models/Portion.php
class Portion extends Model
{
    public product() {
        return $this->belongsTo("Product");
    }
    public ingredients() {
        return $this->belongsToMany("Ingredient");
    }
}

// models/Ingredient.php
class Ingredient extends Model
{
    public portions() {
        return $this->belongsToMany("Portion");
    }
}

应该可以像这样获取包含所有部分和部分成分的产品:

$product = Product::with("portions.ingredients")->find($id)

在 Laravel 文档中检查 Nested Eager Loading

【讨论】:

    猜你喜欢
    • 2016-08-17
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2016-02-06
    • 1970-01-01
    • 2021-06-08
    • 2019-05-07
    相关资源
    最近更新 更多