Laravel Spatie 活动日志包。创建新活动时如何添加causer_id和causer_type?

Posted

技术标签:

【中文标题】Laravel Spatie 活动日志包。创建新活动时如何添加causer_id和causer_type?【英文标题】:Laravel Spatie Actiivity log Packages. How to add causer_id and causer_type when creating new activities? 【发布时间】:2020-05-01 17:47:58 【问题描述】:

我正在使用 spatie 的活动日志来记录模型。问题是如何在为服务收费模型创建新日志时添加causer_id(user_id)。目前,在服务费上执行新活动时,causer_id 和causer_type 为空。

【问题讨论】:

你用的是什么包?我见过的一个具有您要记录的所有模型的特征。如果是这种情况,您只需要覆盖特征中的方法或创建自己的方法以包含更改它的人的用户 ID。 是的!有效。谢谢 【参考方案1】:
public function tapActivity(Activity $activity, string $eventName)

    $activity->causer_id = '$your variable';

【讨论】:

欢迎来到 SO!你能写一点关于这如何解决问题以帮助指导 OP 和未来的访问者吗?谢谢。【参考方案2】:

模型下,可以添加tapActivity()

use Illuminate\Database\Eloquent\Model;
use Spatie\Activitylog\Traits\LogsActivity;
use Spatie\Activitylog\Contracts\Activity;

class NewsItem extends Model

    use LogsActivity;

    public function tapActivity(Activity $activity, string $eventName)
    
        $activity->description = "activity.logs.message.$eventName";
    

链接: https://spatie.be/docs/laravel-activitylog/v3/advanced-usage/logging-model-events#tap-activity-before-logged-from-event

activity()
   ->causedBy($userModel)
   ->performedOn($someContentModel)
   ->log('edited');
   
$lastActivity = Activity::all()->last(); //returns the last logged activity

$lastActivity->causer; //returns the model that was passed to `causedBy`;   

链接:https://spatie.be/docs/laravel-activitylog/v3/basic-usage/logging-activity#setting-a-causer

另一种方法是

use Spatie\Activitylog\Contracts\Activity;

activity()
   ->causedBy($userModel)
   ->performedOn($someContentModel)
   ->tap(function(Activity $activity) 
      $activity->my_custom_field = 'my special value';
   )
   ->log('edited');
   
$lastActivity = Activity::all()->last();

$lastActivity->my_custom_field; // returns 'my special value'

链接: https://spatie.be/docs/laravel-activitylog/v3/basic-usage/logging-activity#user-content-tap-activity-before-logged

【讨论】:

以上是关于Laravel Spatie 活动日志包。创建新活动时如何添加causer_id和causer_type?的主要内容,如果未能解决你的问题,请参考以下文章

php Spatie活动日志值更改

我如何在 laravel 中为 spatie 包(ACL 管理)中的其他角色分配用户列表权限?

如何在登录具有 Spatie 的 Laravel 权限的用户之前检查用户角色?

Laravel 角色和权限包

如何使用 laravel 8 +jetstream + spatie 为注册用户分配角色

Spatie/Newsletter:Laravel 5.6 中提供的 MailChimp 无效 MailChimp API 密钥