【发布时间】:2019-12-24 05:03:03
【问题描述】:
我想加载一个 Species 的集合,按 Genus 的“name”列排序,然后按它们自己的“name”列排序。
$webstore_species = Species::where('in_webstore', true)
->orderBy('name', 'asc')
->with(['genus' => function($query) {
$query->orderBy('name', 'asc');
}])->get();
但是 $query 永远不会执行,结果仅按 Species 名称排序。如果我将它从 orderBy 更改为另一个用于测试的 where 函数,它也不会被执行。
但据我所知,'genus' 关系是正确的并且工作正常,我似乎正在关注有关 Eager Loading 的文档。
class Species extends Model
{
/** Return the many-to-one relationship with the Genus model.
*
* @return App\Models\Genus
*/
public function genus()
{
return $this->belongsTo(Genus::class);
}
}
当我在 Tinker 中执行以下操作时,会显示这种关系有效:
>>> $species = Species::find(46)
=> App\Models\Species {#3201
id: 46,
name: "vagus",
genus_id: 2,
in_webstore: 1,
slug: "camponotus-vagus",
created_at: "2018-09-30 07:10:26",
updated_at: "2019-08-18 21:45:00",
}
>>> $species->genus
=> App\Models\Genus {#3172rBy('name', 'asc');
id: 2,
name: "Camponotus",
}
顺便说一句,我不知道这里的#3172rBy('name', 'asc') 是从哪里来的,是否对我的问题有任何影响。
【问题讨论】: