This forum has moved to a new location and is in read-only mode. Please visit talk.octobercms.com to access the new location.
Is it possible to replace or extend (override) an existing method within a model class. I am looking to replace Blog plugin -> scopeIsPublished method to take account for an additional date check.
$model->addDynamicMethod('scopeIsPublished', function($query){
return $query
->whereNotNull('published')
->where('published', true)
->whereNotNull('published_at')
->where('published_at', '<', Carbon::now())
->where(function($query){
$query->whereNull('delete_at');
$query->orWhere('delete_at', '>', Carbon::now());
});
});
Last updated
Overriding is not possible (actual methods take precedence over dynamic ones). I recommend to create a scope with a different name.
@alxy. Thanks for the input. I cannot use another scope as that specific scope method is utilized by the base plugin/model in some methods. Meaning i want the base plugin/model to respect my new scope anytime it calls the original scope. To achieve this i would have to create a new model and override any methods that utilize 'scopeIsPublished'. This would become hard to maintain on updates.
You can also try to use model events, maybe something like onFetch. I'm not sure if you can determine if the scope is used and then add your conditions dynamically.
@alxy. No luck. I decided to add a new scope & call it as i need. I still have the issue of the base plugin not being aware to take account of the new scope. I could use a global scope, but it could affect the backend management?
1-6 of 6