我的问题是关于自定义Laravel的查询构建器的orderBy()方法的可能性,我用它来排序急切加载的数据集。
这是我用来生成数据集的查询范围。到目前为止一切正常。
NODEMANAGER_MEMORY_FRACTION
我想要实现的是'restaurants.menusToday'的急切负载约束中使用的orderBy()方法的高级'asc':
有人可以帮帮我吗? THX!
答案 0 :(得分:0)
这样的东西可能有用...想法是添加一个额外的选择,取决于日期是否为今天0或1。然后您可以先按该列排序,然后按实际日期排序。
public function scopeRestaurantsWithMenusToday($query, $city_uri){
return $query->where('city_uri', '=', $city_uri)->with([
'restaurants',
'restaurants.menusToday' => function($query) {
$query->addSelect(\DB::raw('if(DATE(`date`) = CURDATE(), 1, 0) as is_current_date'))->orderBy(\DB::raw('is_current_date'), 'DESC')->orderBy('date');
}
]);
}
答案 1 :(得分:0)
我尝试实施类似@ user3158900的建议,直到我发现另一个问题,这使得它非常复杂,难以管理。
在这里我找到了一种新方法,只需在餐厅模型中设置一个属性,告知餐厅今天是否有菜单(= 1)或不是(= 0),然后在orderBy()方法中使用此属性。到现在为止还挺好 :)。所以我开始使用属性设置器和getter,但我不能让它工作。
这 - 作为集合集成的测试 - 工作得很好:
class Restaurant extends Model {
protected $appends = ['menusTodayCheck' => 'thisTestWorks'];}
该集合返回一个数组" menusTodayCheck => ' thisTestWorks"在附录部分。
有没有人知道为什么这些使用$附加的方式让...()不起作用?
第1次失败)
class Restaurant extends Model {
protected $appends = ['menusTodayCheck'];
public function getMenusTodayCheckAttribute()
{
return 'thisTestDoesntWork';
}}
该集合返回一个数组" 0 => menusTodayCheck"在附录部分。
第二次失败)
class Restaurant extends Model {
protected $appends = ['menusTodayCheck' => function() {
return "thisTestDoesntWork";}];}
这个甚至引发了一个错误:意外的'功能' (T_FUNCTION)