我一直在做一个项目,在这个项目中,活动可以用不同的方式使用能力来评分。
表:活动
1.标识符
1.姓名
1.是最新的//当前始终为1
Table:activity_competences //活动、框架能力和子能力之间的链接表
1.标识符
1.活动标识(外键)
1.框架能力标识(外键)
1.主要能力标识(外键)
表:框架_能力
1.标识符
1.姓名
表:主要能力
1.标识符
1.姓名
我希望使用SQL联接获取所有活动及其相应的能力。我还希望用户能够对这些结果进行筛选和排序,以便他们只能看到具有所需能力的活动。
这是我目前拥有的。
$paginateOffset = isset($request->paginateOffset) ? $request->paginateOffset : 0;
$currentSort = isset($request->currentSort) ? $request->currentSort : 'id';
$currentSortDir = isset($request->currentSortDir) ? $request->currentSortDir : 'desc';
$activities = Activity::where('isNewest', 1)
->leftJoin('activity_competences', 'activities.id', '=', 'activity_competences.activity_id')
->leftJoin('framework_competences', 'activity_competences.framework_competence_id', '=', 'framework_competences.id')
->leftJoin('master_competences', 'activity_competences.master_competence_id', '=', 'master_competences.id')
->where(function($query) use ($request){//filter using keyword that user enters.
$query->where('activities.name', 'LIKE','%'.$request->keyword.'%')
->orwhere('framework_competences.name', 'LIKE','%'.$request->keyword.'%')
->orwhere('master_competences.name', 'LIKE','%'.$request->keyword.'%');
})->orderBy($currentSort, $currentSortDir)->offset($paginateOffset)->limit($paginateAmmount)
->get(array('activities.*', 'framework_competences.name as framework_competences', 'master_competences.name as master_competences'));
我得到的回答是:
[
{
"id": 1,
"name": "activity1",
"framework_competences": 'name1',
"master_competences": 'name3',
"isNewest": 1
},
{
"id": 2,
"name": "activity2",
"framework_competences": 'name2',
"master_competences": 'name4',
"isNewest": 1
}
]
但我想说的是:
[
{
"id": 1,
"name": "manjil",
"framework_competences": [name1, name2],
"master_competences": [name3, name4]
}
]
1条答案
按热度按时间6kkfgxo01#
您可以通过在模型Activities中创建关系函数来实现这一点。
例如:
然后,在提取时使用
with()
函数在集合中获取此数据,如$activities = Activity::with('framework','master')->get();
有关详细信息,请访问:https://laravel.com/docs/9.x/eloquent-relationships