Объявление приложения \ Models \ User :: isNot (App \ Models \ User $ user) - PullRequest
0 голосов
/ 07 мая 2019

Я получаю эту ошибку

Объявление App \ Models \ User :: isNot (App \ Models \ User $ user) должно быть совместимо с Illuminate \ Database \ Eloquent \ Model ::isNot ($ model)

для моего кода здесь я использую пакет voyager в laravel, любая идея, как я могу решить эту проблему

<?php

namespace App\Models;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends \TCG\Voyager\Models\User
 {


  public function isNot(User $user){
       return $this->id !== $user->id;
   }

1 Ответ

4 голосов
/ 07 мая 2019

Определяя подсказку типа, вы меняете сигнатуру метода по сравнению с исходным кодом, который вы перезаписываете.

См. Eloquent / Model :

/**
 * Determine if two models are not the same.
 *
 * @param  \Illuminate\Database\Eloquent\Model|null  $model
 * @return bool
 */
public function isNot($model)
{
    return ! $this->is($model);
}

Inдругими словами, вы, вероятно, хотите иметь что-то вроде:

public function isNot($user) {
    return $this->id !== $user->id;
}

или, возможно:

public function isNot($user) {
    if (!$user instanceof User) {
        throw new \InvalidArgumentException('Expected an instance of User');
    }
    return $this->id !== $user->id;
}

Это решение не идеально, но оно гарантирует, что вы сохраните оригинальную сигнатуру метода.

...