Home > Software design >  already four days now, still have not reslove this challenge
already four days now, still have not reslove this challenge

Time:08-28

What am i not doing right? i'm woking on a livewire project that needs to get the grade_id's to show in show-component.blade.php, from Modules table which is related to a Grades table. My challenge is that, it only show a particular id, like the one in the mount section, so if i change it to 2 it will only show id's that are 2's, though thats really what i wanted but i can be change it manually.

use App\Models\Grade;
use App\Models\Module;
use Livewire\Component;

class ShowComponent extends Component
{
    public $modules;
    public $grades;

    public function mount()
    {
        $this->modules = Module::all()->where("grade_id", "1");

    }

    public function render()
    {
       return view('livewire.show-component');
    }
}

=========================================================================

show-component.blade.php

@foreach($modules as $module)
        <div >


                <div >
                    <div >
                        <div >
                        <div ></div>
                        </div>
                        <div >
                        <i ></i>
                        </div>
                    </div>
                    <div >
                        <h2 >
                            {{ $module->name }}
                        </h2>
                        <p >

                            <a href="{{ url('storage/videos'.$module->video) }}">
                                <svg xmlns="http://www.w3.org/2000/svg"  viewBox="0 0 20 20" fill="currentColor">
                                    <path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM9.555 7.168A1 1 0 008 8v4a1 1 0 001.555.832l3-2a1 1 0 000-1.664l-3-2z" clip-rule="evenodd" />
                                </svg>
                            </a>

                        </p>
                    </div>
                </div>

        </div>
    @endforeach

==================================================================

Module's Model

public function grade()
{
    return $this->belongsTo(Grade::class, 'grade_id', 'id');

}

===============================================================

Grade's Model

public function curricula()
{
    return $this->belongsTo(Curriculum::class, 'curricula_id', 'id');
}


public function module()
{
    return $this->hasMany(Module::class);
}

CodePudding user response:

If you want all Module records stored in your database table, you want to remove the where condition which is limiting the return value.

$this->modules = Module::all();

If you want just the grade_ids from your modules table, use pluck:

$grade_ids = Module::pluck('grade_id');

CodePudding user response:

I think what you want is ..

Add

public $grade_id;

Then in mount

$this->modules = Module::where("grade_id", $this->grade_id)->get();

When you load your component you can pass grade_id to it

  • Related