I am trying to get a hasMany of hasMany using jenssegers-mongodb library.
Website model:
use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Model;
use Jenssegers\Mongodb\Eloquent\SoftDeletes;
use Jenssegers\Mongodb\Eloquent\HybridRelations;
class Website extends Model
{
use HybridRelations, SoftDeletes, Sluggable;
protected $connection = 'mysql';
protected $dates = ['created_at', 'updated_at'];
protected $fillable = ['name', 'link', 'slug'];
public function visitors()
{
return $this->hasMany(Visitor::class, 'website_id', 'id');
}
/**
* Return the sluggable configuration array for this model.
*
* @return array
*/
public function sluggable(): array
{
return [
'slug' => [
'source' => 'name'
]
];
}
}
Visitor model:
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
use Jenssegers\Mongodb\Eloquent\SoftDeletes;
class Visitor extends Eloquent
{
use SoftDeletes;
protected $connection = 'mongodb';
protected $dates = ['created_at', 'updated_at'];
protected $fillable = ['uid', 'ip', 'deviceInfo', 'location', 'currentPage', 'currentSection', 'created_at', 'updated_at'];
public function campaigns()
{
return $this->hasMany(Campaign::class);
}
public function clicks()
{
return $this->hasMany(Click::class, 'tracking_id', '_id');
}
public function visits()
{
return $this->hasMany(Visit::class);
}
}
Click model:
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
use Jenssegers\Mongodb\Eloquent\SoftDeletes;
class Click extends Eloquent
{
use SoftDeletes;
protected $connection = 'mongodb';
protected $dates = ['created_at', 'updated_at'];
protected $fillable = ['page', 'section', 'click', 'count', 'created_at', 'updated_at'];
public function tracking()
{
return $this->belongsTo(Tracking::class);
}
}
I am able to get $website->visitors but not $website->visitors()->clicks(). Also I need to perform some aggregation on these clicks.
Error Received:
BadMethodCallException: Method Illuminate\Database\Eloquent\Collection::clicks does not exist. in file /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Macroable/Traits/Macroable.php on line 103
#0 /Applications/MAMP/htdocs/tracking-admin/backend/app/Repositories/Website/WebsiteRepository.php(114): Illuminate\Support\Collection->__call('clicks', Array)
#1 /Applications/MAMP/htdocs/tracking-admin/backend/app/Http/Controllers/WebsiteController.php(116): App\Repositories\Website\WebsiteRepository->collectiveClickData('localhost')
#2 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\Http\Controllers\WebsiteController->collectiveClickData(Object(App\Http\Requests\Website\ValidateDelete), 'localhost')
#3 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction('collectiveClick...', Array)
#4 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Routing/Route.php(254): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(App\Http\Controllers\WebsiteController), 'collectiveClick...')
#5 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Routing/Route.php(197): Illuminate\Routing\Route->runController()
#6 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Routing/Router.php(693): Illuminate\Routing\Route->run()
#7 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#8 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#9 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#10 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(127): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#11 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(63): Illuminate\Routing\Middleware\ThrottleRequests->handleRequest(Object(Illuminate\Http\Request), Object(Closure), Array)
#12 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Routing\Middleware\ThrottleRequests->handle(Object(Illuminate\Http\Request), Object(Closure), '60', '1')
#13 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(44): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#14 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Auth\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), Object(Closure), 'api')
#15 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#16 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Routing/Router.php(695): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#17 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Routing/Router.php(670): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#18 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Routing/Router.php(636): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#19 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Routing/Router.php(625): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#20 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(166): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#21 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#22 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#23 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#24 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#25 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#26 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#27 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#28 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#29 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle(Object(Illuminate\Http\Request), Object(Closure))
#30 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/fruitcake/laravel-cors/src/HandleCors.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#31 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\Cors\HandleCors->handle(Object(Illuminate\Http\Request), Object(Closure))
#32 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#33 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fideloper\Proxy\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#34 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#35 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(141): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#36 /Applications/MAMP/htdocs/tracking-admin/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(110): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#37 /Applications/MAMP/htdocs/tracking-admin/backend/public/index.php(55): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))