You can use subquery inside query select in your Model. You can try this instead
- Example Subquery in Model
<?php
namespace App\Models;
use CodeIgniter\Database\BaseBuilder;
use CodeIgniter\Model;
class M_user extends Model {
protected $table = 'user_absen as UB';
protected $primaryKey = 'id';
public function getData($user_id = 0) {
$this->select('
(SELECT
UBX.date
FROM
user_absen UBX
WHERE
UBX.user_id = UB.user_id
AND UBX.date = UB.date
GROUP BY
UBX.user_id,
UBX.date) AS `DATE`,
(SELECT
UBX.photo
FROM
user_absen UBX
WHERE
UBX.user_id = UB.user_id
AND UBX.date = UB.date
AND UBX.desc = 'in'
GROUP BY
UBX.user_id,
UBX.date) AS `PHOTO_IN`,
(SELECT
UBX.photo
FROM
user_absen UBX
WHERE
UBX.user_id = UB.user_id
AND UBX.date = UB.date
AND UBX.desc = 'out'
GROUP BY
UBX.user_id,
UBX.date) AS `PHOTO_OUT`,
(SELECT
UBX.time
FROM
user_absen UBX
WHERE
UBX.user_id = UB.user_id
AND UBX.date = UB.date
AND UBX.desc = 'in'
GROUP BY
UBX.user_id,
UBX.date) AS `IN`,
(SELECT
UBX.time
FROM
user_absen UBX
WHERE
UBX.user_id = UB.user_id
AND UBX.date = UB.date
AND UBX.desc = 'in'
GROUP BY
UBX.user_id,
UBX.date) AS `OUT`
');
$this->groupBy('UB.user_id, UB.date');
if (isset($user_id) && $user_id != 0) {
$this->where('UB.user_id', $user_id);
}
// Default output as Array
$this->get()->getResult();
}
}
?>
<?php
namespace App\Controllers;
use App\Controllers\BaseController;
use App\Models\M_user;
class ControllerPengadaan extends BaseController {
protected $m_user;
public function __construct() {
$this->m_user = new M_user();
}
public function index() {
$data['data_user'] = $this->m_user->getData(13);
echo view('v_index', $data);
}
}
?>
v_index.php
<table>
<tr>
<th>DATE</th>
<th>PHOTO_IN</th>
<th>PHOTO_OUT</th>
<th>IN</th>
<th>OUT</th>
</tr>
<?php
foreach($data_user as $data) {
echo '
<tr>
<td>'.$data['DATE'].'</td>
<td>'.$data['PHOTO_IN'].'</td>
<td>'.$data['PHOTO_OUT'].'</td>
<td>'.$data['IN'].'</td>
<td>'.$data['OUT'].'</td>
</tr>
';
}
?>
</table>
I hope you are helped.