$config
- это объект Query Builder.Большинство вызовов, которые вы делаете по этому объекту, являются «построением» запроса.Объект сохраняет все эти where
условия внутри.Когда вызывается метод для выполнения запроса, он компилирует запрос, выполняет его и возвращает результат [вызов first
или get
или ...].Сам конструктор все еще существует как конструктор и может продолжать построение, или запрос может быть выполнен снова и т. Д.
В вашем случае вы добавляете больше условий where
к этому единственному объекту запроса, $config
, каждый раз, когда вы вызываете where
для него.
Вы можете увидеть это поведение в любое время, вызвав toSql
в конструкторе, чтобы увидеть, как будет выглядеть сгенерированный запрос.
Этого можно избежать, создав новый объект-конструктор или клонировав $config
, чтобы можно было создать два отдельных запроса.
Пример:
$config = DB::table('custom_config')->where('item_id', 5);
$config2 = clone $config;
$cost = [
'car_service_fee' => $config->where('managed_by', 1)->first()->service_fee,
'bike_service_fee' => $config2->where('managed_by', 2)->first()->service_fee
];
$config
и $config2
обаиметь первое where
условие.
Вы также можете просто клонировать их встроенными, если вам не нужны эти строители после факта:
'car_service_fee' => (clone $config)->where(...)->first()->...,
'bike_service_fee' => (clone $config)->where(...)->first()->...,