如何解决 Missing argument 1 for App\Repositories\FavoriteRepository::delete()?(Laravel 5.3)

5 浏览
0 Comments

如何解决 Missing argument 1 for App\Repositories\FavoriteRepository::delete()?(Laravel 5.3)

我的服务是这样的:

public function delete($store_id)
{
    $result = $this->favorite_repository->delete($store_id);
    dd($result);
}

我的存储库是这样的:

public function delete($store_id)
{
    $data = self::where('favoritable_id', $store_id)->delete();
    return $data;
} 

存在错误:

缺少参数1,用于App\Repositories\FavoriteRepository::delete()的调用,

调用位置

C:\xampp\htdocs\mysystem\app\Repositories\FavoriteRepository.php的第45行并且定义在

你能帮我吗?

更新

EloquentRepository中的delete函数如下:

public function delete($id)
{
    // 查找给定实例
    $deleted  = false;
    $instance = $id instanceof Model ? $id : $this->find($id);
    if ($instance) {
        // 删除实例
        $deleted = $instance->delete();
        // 触发删除事件
        $this->getContainer('events')->fire($this->getRepositoryId().'.entity.deleted', [$this, $instance]);
    }
    return [
        $deleted,
        $instance,
    ];
}

0
0 Comments

原因:出现该问题的原因是因为使用了错误的包,导致调用了不存在的方法。

解决方法:需要修改存储库代码,将 delete 方法替换为 remove 方法。具体代码如下:

public function delete($store_id)
{
    return $this->remove($store_id);
}

如果不使用 where 条件,会出现错误:Call to undefined method Illuminate\Database\Query\Builder::remove()。

检查 composer.json 文件,确认是否使用了正确的包。如果没有使用 nilportugues/eloquent-repository 包,则需要查看使用的是哪个包。

文章内容如下:

在 Laravel 5.3 中出现了 "Missing argument 1 for App\Repositories\FavoriteRepository::delete()" 的问题。原因是使用了错误的包,具体来说是 nilportugues/eloquent-repository 这个包。

解决该问题的方法是修改存储库代码,将 delete 方法替换为 remove 方法。代码如下:

public function delete($store_id)
{
    return $this->remove($store_id);
}

如果不使用 where 条件,则会出现错误:Call to undefined method Illuminate\Database\Query\Builder::remove()。

在解决问题之前,请先确认是否使用了正确的包。检查 composer.json 文件,确认是否使用了 nilportugues/eloquent-repository 包。如果没有使用该包,则需要查看使用的是哪个包。

0
0 Comments

问题出现的原因是在self::where('favoritable_id', $store_id)中返回的实例是EloquentRepository实例,而不是Model实例。EloquentRepository的delete方法是delete($id),而Model的delete方法是delete()。所以你要么获取Model实例来使用delete(),要么在你的实例上使用delete($id)来解决这个问题。

0