我正在使用Cakephp 3并且我面临着排序结果的问题
表格
每位参与者都有职业
每个事件都有sorting_settings
排序设置表
id ------- occupation_id ---------- sort_number ----------- event_id
我想显示所有参与者 Participant.Events(属于Participant.sorting_settings。 sort_number asc我该怎么做?
这是我试过的
$query = $this->Participants->find('all')->contain(
['Events'=>['Sorting_settings'=> ['sort' => ['Sorting_settings.sort_number' => 'asc']]],'Occupations'])
->where(
['Participants.approved'=>false,
'Participants.is_sms_sent'=>false,
'Participants.is_cancel'=>false,
'Events.id'=>$eventID,
'gender'=>$gender])
->order(['Participants.is_first_time , Sorting_settings.sort_number asc, desc,Participants.created asc '])
->limit($limitEachTime);
foreach($query as $participantToSort){
// debug($participantToSort);
echo $participantToSort->id." OC => ".$participantToSort->occupation_id."<br />";
}
答案 0 :(得分:0)
我不确定这个排序号是什么,你的意思是订单吗?您是否尝试过TreeBehaviors可以创建菜单。我会将您的学期参与者更改为人,然后为所述活动参与者命名您的人员列表。
// sudo代码 ParticipantsTable
id - person_id - parent_id - event_id
//参与者控制器
$descendants = $this->Participants
->find('children', ['for' => $head])
->find('threaded')
->where('event_id' => $id)
->toArray();
$this->set('participants', $descendants );
//在ParticipantsTable.php中初始化
$this->addBehavior('Tree');
$this->belongsTo('ParentMenus', [
'className' => 'Participants',
'foreignKey' => 'parent_id'
]);
$this->hasMany('ChildMenus', [
'className' => 'Participants',
'foreignKey' => 'parent_id'
]);
在TreeBehaviors中阅读所有相关内容
对评论的回应
当你说排序数字时,我看到你指的是我称之为层级的数字。不止一个人可以使用相同的排序编号吗?
排序号是附属于职业吗?
如果你的卡住是向后开始的一招。
Sort Table hasMany Occupants
Occupants hasMany Partcipants
Partcipants hasMany Events
//须藤
$this->SortSettings->find('all')->order([sortnumber => 'asc' ] )->where(sort.occupants.particpants.events => $id);