【问题标题】:Laravel lazy eager loading orderingLaravel 延迟加载排序
【发布时间】:2014-01-28 16:08:51
【问题描述】:

我想知道是否可以在延迟加载时订购任何子模型? 目前我有

Item::findOrFail($id)
     ->load('sections', 'level', 'category', 'tags', 'relatedItems');

我希望标签按名称排序,所以我想知道是否有类似

Item::findOrFail($id)
    ->load('sections', 'level', 'category', 'tags', 'relatedItems')
    ->orderBy('tag.name');

有可能。

我在此处看到使用“with”的其他示例,但我似乎无法使用单一基本模型进行加载。

谢谢

【问题讨论】:

  • ...有趣的问题!

标签: laravel laravel-4 eloquent


【解决方案1】:

您使用与急切加载约束相同的语法,

$item = Item::findOrFail($id);
$item->load(array('tags' => function($query) {
    $query->orderBy('tag.name');
}));

在您的示例中,您还可以使用 with() 而不是 load()。后者在您想要加载到现有模型时使用,就像在我的示例中一样,尽管我认为这很麻烦!

【讨论】:

  • 这似乎对我不起作用。如果我使用“加载”,则找不到该项目。如果我使用“with”,则找到该项目,但没有任何标签。在项目模型中我有public function tags() { return $this->belongsToMany('Tag', 'tag_item_map'); } 在标签模型中我有public function category() { return $this->belongsToMany('Item', 'tag_item_map'); }
  • 它对我有用。你可能有其他事情发生。不看模型很难分辨。
猜你喜欢
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 2018-01-24
相关资源
最近更新 更多