SQL Query, or Eloquent Query a foreach loop

Tags: ,



I have a question. Say I have two collections; CompanyOrders and User and need to do a loop to fetch all users involved in company orders, how would i do that? The example of a query that i am looking for will be provided below in a foreach format.

$companyOrders = CompanyOrders::where('id', $company_id)->get();
$users = [];
foreach($companyOrders as $companyOrder){
  $user = User::where('id', $companyOrder['user_id'])->first();
  array_push($users, $user);
}

Now my next part wont work unless my $users is actually a collection. Hence the question, is there any way to query this so that $users = User::where(filters all users who are in various different company orders and gives me all in return)->get();

Points to Note

CompanyOrders has user_id, it’s the link between the company_orders table and the users table.

Thanks for your time and I would really appreciated any help provided! Cheers!

Answer

If you have built relationship

In your model User:

    public function companyOrders()
    {
        return $this->hasMany(AppCompanyOrders::class);
    }

In your CompanyOrders Model:

    public function user()
    {
        return $this->belongsTo(AppUser::class);
    }

you can use whereHas to find the user who has those companyOrders by $company_id:

User::whereHas('companyOrders', function($query) use ($company_id) {
    $query->where('id', $company_id);
})
->get();


Source: stackoverflow