Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

mhmmdva's avatar

how to convert query builder

i want to convert query from sql to eloquent code to eloquent but i can't . because I have to use the foreign key from research_group_id

my query builder is following

SELECT 
    *
FROM
    research_group_statuses
WHERE
    research_group_id = 1
AND status = 'basic';
0 likes
12 replies
tykus's avatar
ResearchGroupStatus::query()
    ->where('research_group_id', 1)
    ->where('status', 'basic')
    ->get();

or, if you already have the ResearchGroup instance, you can use the relationship

$researchGroup->research_group_statuses()
     ->where('status', 'basic')
    ->get();
mhmmdva's avatar

@tykus before that, i make query like this in controller. But, i think i doesn't work

 public function index(ResearchGroup $researchGroup)
    {
        $researchGroup = ResearchGroupStatus::where(array('and', 'research_group_id=1', array('status=basic')));

        return view('client.landing-page', [          
            'researchGroupStatuses' => $researchGroup,
        ]);
    }
tykus's avatar

@mhmmdva what is that query intended to do; it is not valid!?!?

 public function index(ResearchGroup $researchGroup)
    {
        $researchGroupStatuses = $researchGroup->researchGroupStatuses()
            ->where('status', 'basic')
            ->get();

        return view('client.landing-page', [          
            'researchGroupStatuses' => $researchGroupStatuses,
        ]);
    }
tykus's avatar
tykus
Best Answer
Level 104

@mhmmdva yes, and if you want to use Eloquent, then either of the queries I gave you will work:

// Because you already have the `ResearchGroup` instance from Route-Model Binding
$researchGroupStatuses = $researchGroup->researchGroupStatuses()
            ->where('status', 'basic')
            ->get();
// If you don't have the correct ResearchGroup instance for some reason
$researchGroupStatuses = ResearchGroupStatus::query()
            ->where('research_group_id', 1)
            ->where('status', 'basic')
            ->get();

Remember you must execute the query using get()

1 like
mhmmdva's avatar

how to use AND clause in laravel? because this code almost does what I want and should evaluate to TRUE

ResearchGroupStatus::query()
    ->where('research_group_id', 1)
    ->where('status', 'basic')
    ->get();
mhmmdva's avatar

i have four status with enum type in laravel (basic, development, commercial, applied) . But with this query, it displays all three statuses like (basic, development, commercial). I just want to show the basics.

tykus's avatar

The SQL AND operator is implied.

You're changing the requirement; I'm not 100% sure what you're looking for now.

krisi_gjika's avatar

@mhmmdva why would you reference the docs of another framework, when asking a question about Laravel/Eloquent? Read the docs of laravel on eloquent not this yii framework.

mhmmdva's avatar

@krisi_gjika I'm sorry, my friend, because I was just looking for references and answers for my ignorance

mhmmdva's avatar

I'm going to perform it with an accordion within an accordion

@forelse ($researchGroup as $group)
                        <h1>{{ $group->theme }}</h1>
                        @forelse ($group->researchGroupStatuses as $status)
                            <ul>
                                <li>{{ $status->research_title }}</li>
                            </ul>
                        @empty
                            <p>data is empty</p>    
                        @endforelse
@empty
      <p>data is empty</p>
@endforelse

Please or to participate in this conversation.