Laravel Eloquent使用with()从嵌套表中获取某些列

时间:2013-08-26 08:00:26

标签: php orm laravel eloquent

我正在尝试使用嵌套继承获取表并过滤某些列。并且找不到容易做到的事。

我有桌面店女巫有很多地方(位置有一个城市)和许多行动

我希望使用Eloquent一次性获取所有内容并过滤特定列。

这是我如何过滤商店表但不知道如何过滤表位置和操作。

$this->shop->with('locations')->with('actions')->get(array('id','name','recommended','category_id'));

我需要这样的东西:

$this->shop
->with('locations',Location::with('city', City::get(array('id','name')))->get(array('id','name')))
->with('actions', Action::get(array('id','name')))->get(array('id','name')););

1 个答案:

答案 0 :(得分:0)

请参阅Laravel Eloquent: How to get only certain columns from joined tables

最简单的方法是过滤模型中的列(如上面链接的顶部答案中所述)。但是,当您想要构建动态查询时,这可能会很不方便。

理论上你应该可以这样做:

$this->shop->with(array('locations' => function($query) {
                                            $query->select('id', '...etc...');
                                       }

...遗憾的是它似乎不适用于select();当我测试它时,我得到一个空白数组。然而,其他方法确实有效,例如

$this->shop->with(array('locations' => function($query) {
                                            $query->orderBy('id', 'DESC');
                                       }

使用Fluent Query Builder可能会更好。它不像ORM那样“性感”或时髦,但我发现在处理动态查询时更容易使用。