Добавить результат взаимосвязи в запрос where

#laravel #eloquent #eloquent-relationship

#laravel #красноречивый #красноречивое отношение

Вопрос:

Кто-нибудь может помочь, у меня закончились идеи.

У меня есть этот код:

 $item = ItemsBrandOitb::select('ItmsGrpCod')->where('Brand', '=', $brand)->first();

return ItemsOitm::where('Country', $country)
            ->where('OnHand', '>', 0)
            ->where('ItmsGrpCod','=', $item->ItmsGrpCod)
            ->with([
               'price' => function($q) use ($country){
                  return $q->where('Country', $country);
               },
               'stock'=> function($q) use ($country){
                   return $q->where('Country', $country);
               },
               'brand' => function($q) use ($brand){
                   return $q->whereHas('Brand', '=', $brand);
               }
           ]
       )->groupBy('U_GeralRef')->orderBy('ColectionDate', 'desc')->get();
  

Кто-нибудь знает, как поместить этот запрос:

 $item = ItemsBrandOitb::select('ItmsGrpCod')->where('Brand', '=', $brand)->first();

//here:

->where('ItmsGrpCod','=', $item->ItmsGrpCod)
  

Значит, у меня может быть только один запрос к базе данных?

Спасибо

Комментарии:

1. вы можете использовать вложенный запрос

2. если вы разделяете структуру базы данных, я напишу запрос объединения

Ответ №1:

Попробуйте что-то вроде этого:

 return ItemsOitm::where('Country', $country)
        ->where('OnHand', '>', 0)
        ->where('ItmsGrpCod', function ($query) use ($brand) {
            $query->from('TABLE_NAME')
                ->where('Brand', '=', $brand);
        })
        ->with([

                'price' => function( $q) use ($country){ 
                    return $q->where('Country', $country);
                },
                'stock'= > function( $q) use ($country){ 
                    return $q->where('Country', $country);
                },
                'brand' => function( $q) use ($brand){ 
                    return $q->whereHas('Brand', '=', $brand);
                }
            ]
        )->groupBy('U_GeralRef')->orderBy('ColectionDate', 'desc')->get();  
  

Комментарии:

1. Это почти то, что мне нужно: но мне нужно иметь select в подзапросе, и когда я это делаю, Laravel выдает ошибку

Ответ №2:

Прибил его:

 return ItemsOitm::where('Country', $country)
            ->where('OnHand', '>', 0)
            ->where('ItmsGrpCod', function ($query) use ($brand) {
                $query->select('ItmsGrpCod')->from('items_brand_oitbs')
                    ->where('Brand', $brand);
            })
            ->with([
                    'price' => function($q) use ($country){
                        return $q->where('Country', $country);
                    },
                    'stock'=> function($q) use ($country){
                        return $q->where('Country', $country);
                    }
                ]
            )->groupBy('U_GeralRef')->orderBy('ColectionDate', 'desc')->get();
  

Пришлось удалить последнюю нетерпеливую загрузку (бренд) Мне это не нужно, потому что я уже получаю значение в подзапросе

Спасибо всем, кто помог. Приветствия!