0

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.

HirenMangukiya
  • 645
  • 3
  • 13
  • 30

6 Answers6

4

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

Sunny Doshi
  • 363
  • 2
  • 11
2

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();
Nikhil Radadiya
  • 1,995
  • 2
  • 20
  • 43
1

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();
Demonyowh
  • 1,673
  • 1
  • 9
  • 14
1

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();
Autista_z
  • 2,491
  • 15
  • 25
1
$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

Exprator
  • 26,992
  • 6
  • 47
  • 59
0

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();
Sandeesh
  • 11,486
  • 3
  • 31
  • 42