私はLaravel 5.4アプリケーションに取り組んでいて、spatie/laravel-activitylog v1.16をインストールしようとしています(古いバージョンでは、新しいv2.4.3が5.4との共同作業)link to packagespatie laravel-activitylogsアクティビティモデルを拡張して新しい塗りつぶしを追加する
私の問題は、パッケージには、CausesActivity Traitというパッケージを使用して原因を追加できるということです。すべてのモデルにcompany_id属性が設定されているため、それは機能しませんでしたので、Companyモデルに追加しました。 多くのユーザーがいる会社に、ログを作成する際に会社のIDをテーブルに追加したいと思っています。 アクティビティモデルを拡張し、company_idカラムを(パッケージ)からactivity_logテーブルに追加したCompanyLogActivityモデルを作成し、新しいモデルを設定ファイルに追加しました。
私は、試してみました:なし使用
use Illuminate\Database\Eloquent\Model;
use Spatie\Activitylog\Models\Activity;
use HipsterJazzbo\Landlord\BelongsToTenants;
class CompanyActivityLogs extends Activity
{
use BelongsToTenants;
protected $table = ['activity_log'];
public $tenantColumns = ['company_id'];
}
でbelongsToTenant形質を追加
は、モデルの$充填可能なを使用して、私の中でその後のcompany_id
<?php
namespace App\Observers;
use App\CompanyActivityLogs;
use Auth;
use Spatie\Activitylog\Models\Activity;
class CompanyActivity
{
public function creating($model)
{
$model->fill(['company_id' => Auth::user()->company_id])->save();
}
public function updating($model) {
$model->fill(['company_id' => Auth::user()->company_id])->save();
}
を埋めるために作成または保存するための観察新しいCompanyActivityLogsモデル
public static function boot() {
parent::boot();
CompanyActivityLogs::observe(new CompanyActivity());
}
それはうまくいかず、私は素晴らしい解決策になると思っていました。私はobserveステートメントでActivity(親モデル)のCompanyActivityLogsを切り替えようとしましたが、うまくいきませんでした。
私は最後に、私は親にそれを追加しようとした拡張モデルに
public static function boot()
{
parent::boot();
static::creating(function($model)
{
$model->created_by = public static function boot()
{
parent::boot();
static::creating(function($model)
{
$model->created_by = Auth::user()->company_id;
//also tried $model->save(); here
});
};
を追加しようとしました::配列
protected $fillable = ['company_id'];
public function toArray()
{
$array = parent::toArray();
foreach ($this->getMutatedAttributes() as $key)
{
if (! array_key_exists($key, $array)) {
$array['company_id'] = Auth::user()->company_id;
}
}
return $array;
}
私はそのうちの一つが役立つだろう考えて非常に多くの異なる方法を試してみました。