渴望加载嵌套的多重关系

时间:2017-09-02 18:46:52

标签: php mysql laravel eloquent laravel-5.4

我有一些表格:

  • 记录
  • record_relations
  • 标识
  • 库存
  • 价格

Record具有与IdentificationInventoryPrice相关的多态关系。 InventoryMetric有关系,PriceCurrency有关系。所以......

  • Record hasMany RecordRelationsrelations()
  • RecordRelation morphTo IdentificationInventoryPricerelation()
  • Inventory belongsTo Metricmetric()
  • Price belongsTo Currencycurrency()

如果我懒加载一切正常但我需要加载所有关系(我在数据表中显示它们);在尝试了很多之后,我能够加载最深的关系:

$builder->with([
    'relations' => function($query) {

        $query->with('relation.metric')->where('relation_type', '=', 'App\\Inventory');

    }
]);

但是,如果我添加其他关系,我的所有关系都是空的......

$builder->with([
    'relations' => function($query) {

        $query->with('relation');
        $query->with('relation.metric')->where('relation_type', '=', 'App\\Inventory');
        $query->with('relation.currency')->where('relation_type', '=', 'App\\Price');

    }
]);

似乎我出于某种原因无法" withWhere"不止一次。有办法吗?

1 个答案:

答案 0 :(得分:0)

将您的关系定义为以下

$builder->with([
    'relations' => function($query) {
        $query->addSelect('column_names');
    },
    'relation.metric' => function($query){
        $query->addSelect('column_names')->where('_condition goes here');
    },
    'relation.currency' => function($query){
        $query->addSelect('column_names')->where('_condition goes here');
    }

]);

将columns_names替换为您要检索的列的名称。 和_condition与您想要应用的条件。