laravel 当我试图继承一个模型时,我该如何使用Eloquent ORM?

gxwragnw  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(125)

ENV:
PHP:Session扩展-Manual
LARAVEL:10.10
我有一个这样的消息模型:

# 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)
    {
    }
}

我有一个这样的服务:

# 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()时,我得到一个错误消息Call to undefined method App\Repositories\MessageRepository::all()
为什么我不能继承模特的遗产
如何修复我的代码?
我的解决方案之一是在MessageRepository.php中定义一个函数all()

...

    function all()
    {
        return $this->message->all();
    }
t30tvxxf

t30tvxxf1#

在MessageRepository中将protected设置为public
正确的调用方法是:

function all() {
    return $this->message->Message->all();
}

相关问题