Так что я следующий объем на модели Инвестор:Laravel дает мне возразить, когда он не должен
public function scopeCountUsersInRegionForCompany(Builder $query, $companyName, $regionCode)
{
return $query->select('users.*')
->join('user_profile', 'user_profile.user_id', '=', 'users.id')
->join('investments', 'users.id', '=', 'investments.user_id')
->join('offerings', 'investments.offering_id', '=', 'offerings.id')
->join('companies', 'offerings.company_id', '=', 'companies.id')
->where('companies.slug', '=', $companyName)
->where('user_profile.region', '=', $regionCode)
->count();
}
его использовали в следующем контексте:
public function regionCountForCompany($slug)
{
$regions = [];
$totalUsersForCompany = Investor::countUsersForCompany($slug);
if ($totalUsersForCompany === 0) {
return [];
}
foreach ($this->getAllRegions() as $regionCode => $regionName) {
$regions[$regionName] = (Investor::countUsersInRegionForCompany($slug, $regionCode)/Investor::countUsersForCompany($slug)) * 100;
}
if (max($regions) > 0) {
return $regions;
} else {
return [];
}
}
Обратите внимание на для каждого цикла:
foreach ($this->getAllRegions() as $regionCode => $regionName) {
$regions[$regionName] = (Investor::countUsersInRegionForCompany($slug, $regionCode)/Investor::countUsersForCompany($slug)) * 100;
}
следующий вызов:
Investor::countUsersInRegionForCompany($slug, $regionCode)
вернет 1
, а затем в другое время после этого он вернется: Object of class Illuminate\Database\Eloquent\Builder could not be converted to int
Если да, то: var_dump(is_object(Investor::countUsersInRegionForCompany($slug, $regionCode)))
Его ложный один раз, затем верно для каждого другого его вызываемого.
Это единственный вопрос, который вызывает эту проблему. Как бы то ни было, если я делаю var dump внутри области, чтобы получить переменную $query
вместо того, чтобы возвращать ее, как вы видите, что я делаю, она возвращается как int.
Если я ударил конечную точку в браузере, который вызывает этот конкретный набор кода, все это работает, никаких ошибок об объектах или любом из них. Тест выглядит следующим образом:
public function it_should_return_region_count_for_investors() {
$this->createInvestment();
$investor = factory(User::class)->create([
'role_id' => 4
]);
$response = $this->actingAs($investor)
->call('GET', 'api/v1/investors-signedup-by-jurisdiction/');
$this->assertNotEmpty(json_decode($response->getContent()));
}
ответ возвращается как: Object of class Illuminate\Database\Eloquent\Builder could not be converted to int
(Это фактически делает страницу ошибки Laravel HTML с этим сообщением)
Что происходит?
Что произойдет, если вы сделаете '-> get() -> count();' вместо '-> count();'? – Jamesking56
Точная же проблема @ Jamesking56 – TheWebs