Search code examples
mysqllaravellaravel-9is-empty

How to see only uploaded users in laravel?


I want to ask, how do I upload a file to the web on user 1 but only attach it to user 1, whereas currently it is also attached to user 2, my coding is wrong.
like the example image below: Images Web
If you look at the picture, if it has been uploaded, change it to Submitted status in the "Bahasa Indonesia" SUBJECT, but for user 2 it hasn't been uploaded, but it has also become Submitted, user 2's status must be Waiting because it hasn't been uploaded yet. And here is attached my mysql uploaded on user 1: Images MySqli

AssignmentStudentController

public function DataAssignment(){
    $userAssignments = Assignment::join('subjects', 'assignments.id_subject', '=', 'subjects.id_sub')
        ->join('class_infos', 'subjects.id_class', '=', 'class_infos.id')
        ->join('class_details', 'class_infos.id', '=', 'class_details.id_class')
        ->where('class_details.id_user', '=', Auth::user()->id)
        ->get();

    return view('student.assignment.data_assignment', compact('userAssignments'));
}

AssignmentStudentController.php

<table class="w-full text-sm text-left text-gray-500 dark:text-gray-400">
    <thead class="text-xs text-white uppercase bg-[#464867] dark:bg-[#464867]">
    <tr>
        <th scope="col" class="py-3 px-6">
            Subject
        </th>
        <th scope="col" class="py-3 px-6">
            Title
        </th>
        <th scope="col" class="py-3 px-6">
            Due Date
        </th>
        <th scope="col" class="py-3 px-6">
            Submission Date
        </th>
        <th scope="col" class="py-3 px-6">
            Status
        </th>
        <th scope="col" class="py-3 px-6">
            Score
        </th>
        <th scope="col" class="py-3 px-6">
            Action
        </th>
    </tr>
    </thead>
    <tbody>
    @forelse($userAssignments as $data)
        <tr class="bg-white border-b dark:bg-gray-900 dark:border-gray-700">

            <th scope="row" class="py-4 px-6 font-medium text-gray-900 whitespace-nowrap dark:text-white">
                {{$data->subjects->name_subject}}
            </th>

            <td class="w-24 px-6 py-4 text-sm font-medium text-gray-900 whitespace-nowrap dark:text-white">
                {{$data->title}}
            </td>
            <td class="py-4 px-6 font-medium text-gray-900 whitespace-nowrap dark:text-white">
                {{ date('d M Y - H:m', strtotime($data->due_date)) }} WIB
            </td>
            <td class="py-4 px-6 font-medium text-gray-900 whitespace-nowrap dark:text-white">
                {{ (!empty($data->assignments->id_student)) ? date('d M Y - H:m' ,strtotime($data->assignments->updated_at)):'Not uploaded yet' }}
            </td>
            <td class="py-4 px-6 font-medium text-gray-900 whitespace-nowrap dark:text-white">
                {{ (!empty($data->assignments->id_student)) ? 'Submitted':'Waiting' }}
            </td>
            <td class="py-4 px-6 font-medium text-gray-900 whitespace-nowrap dark:text-white">
                {{ (!empty($data->assignments->id_student)) ? ($data->assignments->score) ? $data->assignments->score :'Process':'0' }}
            </td>
            <td class="py-4 px-6 flex font-medium text-gray-900 whitespace-nowrap dark:text-white">
                @if(!empty( $data->assignments->id_student))
                    <a href="{{ (!empty($data->assignments->file_assignment))? url('upload/assignment/students/'.$data->assignments->file_assignment):''}}" download>
                        <svg xmlns="http://www.w3.org/2000/svg" class="h-10 w-10" viewBox="0 0 20 20" fill="currentColor">
                            <path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z" clip-rule="evenodd"></path>
                        </svg>
                    </a>
                @else

                @endif

                <a type="button" data-modal-toggle="{{route('input.assignment', $data->id_id)}}">
                    <svg xmlns="http://www.w3.org/2000/svg" class="h-10 w-10" viewBox="0 0 20 20" fill="currentColor">
                        <path fill-rule="evenodd" d="M6 2a2 2 0 00-2 2v12a2 2 0 002 2h8a2 2 0 002-2V7.414A2 2 0 0015.414 6L12 2.586A2 2 0 0010.586 2H6zm5 6a1 1 0 10-2 0v2H7a1 1 0 100 2h2v2a1 1 0 102 0v-2h2a1 1 0 100-2h-2V8z" clip-rule="evenodd"></path>
                    </svg>
                </a>

                <a href="{{ (!empty($data->file_asg))? url('upload/assignment/question/'.$data->file_asg):url('images/no_image.jpg') }}" download>
                    <svg xmlns="http://www.w3.org/2000/svg" class="h-10 w-10" viewBox="0 0 20 20" fill="currentColor">
                        <path fill-rule="evenodd" d="M6 2a2 2 0 00-2 2v12a2 2 0 002 2h8a2 2 0 002-2V7.414A2 2 0 0015.414 6L12 2.586A2 2 0 0010.586 2H6zm5 6a1 1 0 10-2 0v3.586l-1.293-1.293a1 1 0 10-1.414 1.414l3 3a1 1 0 001.414 0l3-3a1 1 0 00-1.414-1.414L11 11.586V8z" clip-rule="evenodd"></path>
                    </svg>
                </a>
            </td>
        </tr>
    @empty
        <tr colspan = "7" class="bg-white border-b dark:bg-gray-900 dark:border-gray-700">
            <td class="py-4 px-6 font-medium text-gray-900 whitespace-nowrap dark:text-white">
                No Data
            </td>
        </tr>
    @endforelse
    </tbody>
</table>

Solution

  • You can check by defining a new method in addition to the assignments method in your model:

    class Assignment extends Model
    {
        public function assignments()
        {
            return $this->hasMany(<YOUR_ASSIGNMENTS_TABLE_NAME>::class, 'id_assignment', 'id_id');
        }
    
        // new method
        public function checkStudentAssignmentIsNull()
        {
            return $this->hasMany(<YOUR_ASSIGNMENTS_TABLE_NAME>::class, 'id_assignment', 'id_id')
                ->where('<YOUR_ASSIGNMENTS_TABLE_NAME>.id_student', Auth::user()->id)
                ->first() === null;
        }
    }
    

    And when using, you can do !$data->checkStudentAssignmentIsNull() instead of !empty($data->assignments->id_student).

    I see your tables more clearly now:

    // new method
    public function checkStudentAssignmentIsNull()
    {
        return $this->hasMany(AssignmentDetail::class, 'id_assignment', 'id_id')
            ->where('assignment_details.id_student', Auth::user()->id)
            ->first() === null;
    }