为什么通过__construct()继承的model无法调用all()?
1. 运行环境
Laravel版本:10.10
PHP 版本:8.2
系统:Windows 11
2. 问题描述?
我创建了一个Model
# Message.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Message extends Model
{
use HasFactory;
public $timestamps=false;
function subject():HasMany
{
return $this->hasMany(Subject::class);
}
}
然后创建了一个repository:
# MessageRepository.php
<?php
namespace App\Repositories;
use App\Models\Message;
class MessageRepository
{
public function __construct(protected Message $Message)
{
}
}
然后创建了一个Message的Service
# MessageService.php
<?php
namespace App\Services;
use App\Repositories\MessageRepository;
class MessageService
{
function __construct(protected MessageRepository $message)
{
}
function infos()
{
return ['count'=>$this->all()->count()];
// return ['count'=>4];
}
function all()
{
return $this->message->all();
}
}
当我试着调用infos函数的时候,laravel报错 Call to undefined method App\Repositories\MessageRepository::all()
当然我可以自己在MessageRepository.php写一个 all(),
# ...略过代码
function all()
{
return $this->message->all();
}
但是为什么我没能继承model?我尝试在repository里打印$this->message,得到的是message的model啊?
你调用错了。正确的
MessageRepository里的message需要设置为public
MessageRepository没有继承model