Paradox
3 سال پیش توسط Paradox مطرح شد
0 پاسخ

بلاک و ریپورت کاربران

سلام وقت بخیر
من میخام از طریق لایووایر برای برنامه چت گزینه بلاک و انبلاک و ریپورت بزارم
به جدول ایجاد کردم به این شکل

    Schema::create('user_logs', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->foreignId('user_id')->constrained();
            $table->foreignId('blocked_user_id')->nullable()->constrained('users');
            $table->enum('action', ['blocked', 'unblocked', 'reported'])->default('unblocked');
            $table->timestamps();
        });

model user


    public function logs()
    {
        return $this->hasMany(UserLog::class);
    }

    public function blockedUsers()
    {
        return $this->hasMany(UserLog::class, 'user_id', 'id');
    }

model userlog

    protected $fillable = [
        'user_id',
        'blocked_user_id',
        'action',
    ];

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function blockedUser()
    {
        return $this->belongsTo(User::class, 'blocked_user_id');
    }

و حالا تو component به این شکل نوشتم

    public $userId;

   public function blockUser()
    {
        $blockedUser = User::find($this->userId);

        if ($blockedUser) {
            $this->user->logs()->create([
                'user_id' => auth()->user()->id,
                'blocked_user_id' => $blockedUser->id,
                'action' => 'blocked',
            ]);
            event(new UserBlocked($blockedUser->id));
            session()->flash('message', 'User blocked successfully!');
        } else {
            session()->flash('message', 'Invalid user ID!');
        }
    }

ایونت

class UserBlocked
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $blockedUserId;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($blockedUserId)
    {
        $this->blockedUserId = $blockedUserId;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new PrivateChannel('user.'. $this->blockedUserId);

    }
}

تو بلید هم به این شکل

                    <button wire:click="blockUser({{ $userId->id }})">Block User</button>

اروری که دریافت میکنم

Attempt to read property "id" on null

لطفا راهنمایی کنید مشکل کارم کجاست این ایدی که تو بلید تعریف کردم رو نمیشناسه

                    <button wire:click="blockUser({{ $userId->id }})">Block User</button>