使用预先加载的多态与多个关系定义列

时间:2014-03-13 23:21:33

标签: php laravel

我无法使用“多对多多样性关系”在急切加载中选择列

我的要求是:

Etape::with(array('entreprises'=> function($query) {
    return $query->select('entreprises.id');
}))->get();

关系定义如下

class Etape extends Eloquent {
    public function entreprises()
        {
            return $this->morphedByMany('Entreprise', 'etapeable')->withPivot('date');
        }
}

class Entreprise extends Eloquent {
    public function etapes() {
        return $this->morphToMany('Etape', 'etapeable')->withPivot('date')->orderBy('date');
    }
}

执行这些SQL请求:

SELECT * FROM `etapes` WHERE `etapes`.`deleted_at` IS NULL

SELECT `entreprises`.`id`, `entreprises`.*, `etapeables`.`etape_id` as `pivot_etape_id`, `etapeables`.`etapeable_id` as `pivot_etapeable_id`, `etapeables`.`date` as `pivot_date` FROM `entreprises` inner join `etapeables` on `entreprises`.`id` = `etapeables`.`etapeable_id` WHERE `entreprises`.`deleted_at` IS NULL and `etapeables`.`etape_id` in ('12', '13', '14') and `etapeables`.`etapeable_type` = 'Entreprise'

如您所见,第二个请求以:

开头
SELECT `entreprises`.`id`, `entreprises`.*

因此不考虑选择方法。这是一个Laravel错误还是有其他解决方案来解决这个问题?

1 个答案:

答案 0 :(得分:1)

Laravel不支持(4. *和5. *)。

看看at the issue创建的@edi9999:泰勒奥特威尔所说的:

  

这是一个已知问题。我们不允许"选择"关于多人关系。

another issue(2013年底创建)Taylor说

  

我们目前不支持限制这些关系的选择,因为如果它没有正确完成,它可能会破坏查询。如果您愿意,可以在检索数据后删除列。