Laravel5 - 不应静态调用非静态方法

5
我不知道这是哪种错误,请有人给我解释一下。
在我的 UserController.php 中。
class UserController extends Controller {
    public function viewCard($card_id) {
        return Tag::test($card_id);
    }
}

在我的模型Tag.php上。
class Tag extends Model {
    public function test($card_id){
        return DB::SELECT(DB::RAW("SELECT name FROM tagmap tm, tags t WHERE t.id = tm.tag_id AND tm.card_id = :card_id"), ['card_id'=>$card_id]);
    }
}

我不知道它失败的地方,我做错了哪里...
谢谢...

1
你难道不读错误信息,只是简单地复制粘贴吗?:: 是调用静态方法的符号,而你的方法不是静态的.. :) - Svetoslav
  1. 创建实例 $tag = new Tag();
  2. $tag->($card_id)
- sergio
1个回答

3

public function test()不是一个静态方法。当您尝试使用Tag::test()访问静态方法时,它会失败,因为这个方法不是静态的。

你有两个选择:

1)将你的方法设置为静态

class Tag extends Model {
    public static function test($card_id){
        return DB::SELECT(DB::RAW("SELECT name FROM tagmap tm, tags t WHERE t.id = tm.tag_id AND tm.card_id = :card_id"), ['card_id'=>$card_id]);
    }
}

2) 通过首先实例化你的类,将其作为一个实例方法调用:

$tag = new Tag();
$tag->test($card_id);

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - sergio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接