Внутренний запрос в построителе запросов laravel 5.3

Я пытался получить данные, используя внутренний запрос Laravel, как, но я столкнулся с проблемой, когда я передаю значение переменной в качестве значения, мой запрос, как показано ниже.

    $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();

Если я передам статическое значение вместо $seller_name тогда работает отлично, я проверил $seller_name не является нулевым, это показывает, что переменная ошибки не определена.

6 ответов

Решение

Попробуйте это, вы должны передать переменную $ после функции с use как это

$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();

Вы должны передать переменную в использование функции ($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();

Вы можете обратиться к документу здесь: https://laravel.com/docs/5.4/queries

Вы должны передать переменную анонимной функции с 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();
$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();

ты забыл использовать use

Ты должен использовать use лайк

$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();

Вам нужно пройти $seller_name до закрытия с помощью use, Не использовать get() в запросе закрытия, чтобы получить ваш результат с одним запросом базы данных.

$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();

Также ваш код делает то же самое, что и этот.

$supplier_address = DB::table('supplier_addresses')
    ->where('company_name', $seller_name)
    ->get();
Другие вопросы по тегам