只是一个小的介绍:
我想用逗号分隔的参与者获取所有任务的列表,如下所示(数组表示):
[
'title' => 'Example task',
...
'authors' => 'Name1 Surname1, Name2 Surname2',
'doers' => 'Name3 Surname3',
'checkers' => 'Name4 Surname4'
]
在一个查询中。
我认为MySQL CONCAT(GROUP_CONCAT等)功能可以帮助我解决这个问题,但我不确定在这里使用它是否正确。
请帮助:3
答案 0 :(得分:0)
在Laravel v4.2中这样做了吗? 查询数= 6 *任务数。很重..但我很快就会改变它。
/**
* Get the full list of tasks with participants
* @return array
*/
public static function index() {
/**
* All tasks
* @var array
*/
$tasks = DB::select("SELECT `title` FROM `task` ");
/**
* All roles
* @var array
*/
$roles = ['doers', 'checkers', 'authors'];
foreach ($tasks as &$task)
{
foreach ($roles as $role) {
$sql = "SELECT GROUP_CONCAT(CONCAT_WS(' ', `name`, `surname`) SEPARATOR ', ') AS `$role` FROM `task` ";
$sql .= "JOIN `task_has_user` ON `idtask` = `task_idtask` ";
$sql .= "JOIN `user` ON `iduser` = `user_iduser` ";
$sql .= "WHERE `task_has_user`.`role` = " . (array_search($role, $roles) + 1);
$task->$role = DB::select($sql)[0]->$role;
}
}
return $tasks;
}