inner query in laravel 5.3 query builder

813 Views Asked by At

I tried to get data using Laravel inner query like but I face a problem where I pass value variable as value my query is as below.

    $seller_name = $request->seller_name;
    $supplier_address = DB::table('supplier_addresses')
        ->where('company_main_name', function($query)
        {
            $query->select('company_main_name')
                ->where('company_name',$seller_name)
                ->from('supplier_addresses')
                ->get();
        })
        ->get();

If I pass static value instead of $seller_name then it works perfectly, I checked $seller_name is not null, it shows error variable is not defined.

6

There are 6 best solutions below

0
On BEST ANSWER

Try this, you have to pass your $variable after function with use like this

$seller_name = $request->seller_name;
$supplier_address = DB::table('supplier_addresses')
        ->where('company_main_name', function($query ) use($seller_name)
        {
            $query->select('company_main_name')
                ->where('company_name',$seller_name)
                ->from('supplier_addresses')
                ->get();
        })
        ->get();
0
On

you have to use use like

$seller_name = $request->seller_name;
$supplier_address = DB::table('supplier_addresses')
    ->where('company_main_name', function($query) use ($seller_name)
    {
        $query->select('company_main_name')
            ->where('company_name',$seller_name)
            ->from('supplier_addresses')->get();
    })
    ->get();
0
On

You have to pass variable to anonymous function with use ($seller_name)

$seller_name = $request->seller_name;
$supplier_address = DB::table('supplier_addresses')
    ->where('company_main_name', function($query) use ($seller_name)
    {
        $query->select('company_main_name')
            ->where('company_name',$seller_name)
            ->from('supplier_addresses')
            ->get();
    })
    ->get();
0
On
$seller_name = $request->seller_name;
$supplier_address = DB::table('supplier_addresses')
        ->where('company_main_name', function($query ) use($seller_name)
        {
            $query->select('company_main_name')
                ->where('company_name',$seller_name)
                ->from('supplier_addresses')
                ->get();
        })
        ->get();

you forgot to use use

0
On

You need to pass $seller_name to the closure using use. Don't use get() in the closure query to get your result with a single database query.

$supplier_address = DB::table('supplier_addresses')
    ->where('company_main_name', function($query) use ($seller_name) {
        $query->select('company_main_name')
            ->where('company_name', $seller_name)
            ->from('supplier_addresses');
    })
    ->get();

Also your code does the same as this.

$supplier_address = DB::table('supplier_addresses')
    ->where('company_name', $seller_name)
    ->get();
0
On

You have to pass variable in function use ($seller_name)

$seller_name = $request->seller_name; 
$supplier_address = 
    DB::table('supplier_addresses')
       ->where('company_main_name', function($query) use ($seller_name) 
       {
              $query->select('company_main_name')
                    ->where('company_name',$seller_name) 
                    ->from('supplier_addresses') ->get(); 
       }) 
    ->get();

You can refer doc here: https://laravel.com/docs/5.4/queries#conditional-clauses