在哪里提供" morphMap"设置为没有laravel的独立雄辩使用

时间:2018-01-16 01:10:30

标签: laravel eloquent

我使用eloquent作为具有超薄框架(https://www.slimframework.com/docs/cookbook/database-eloquent.html

的独立模块

我的问题是 - 我可以提供多态关系" morphMap"设置?

3 个答案:

答案 0 :(得分:0)

要避免在每个模型的关系中使用morphMap,可以在morphMap处覆盖启动方法设置:

class Post extends Model
{
    protected static function boot(){`
        parent::boot();

        Relation::morphMap([
            'posts' => 'App\post',
        ]);
    }

    public function comments(){
        return $this->morphMany('App\Comment', commentable);
    }
}

答案 1 :(得分:0)

今天我搜索了同样的问题。

Slim4和雄辩的人。

我必须在容器启动文件中遵循以下代码,它才能正常工作。

container.php


// eloquent
$capsule = new \Illuminate\Database\Capsule\Manager;
$capsule->addConnection($dbSettings);
$capsule->setAsGlobal();
$capsule->bootEloquent();


$container->set('db', function ($container) use ($capsule) {
    Illuminate\Database\Eloquent\Relations\Relation::morphMap([
        App\Models\Order::class
    ]);
    return $capsule;
});

现在我的数据库包含order而不是App\Models\Order

不知道这是正确的方法。

但是这种方式我只需要在一个地方编写即可。

答案 2 :(得分:-1)

您应该在morphMapmorph中定义的每个函数中定义morphToMany

  

示例:

这是comments函数模型:

class comment extends Model
{

    public function commentable(){

        Relation::morphMap([
            'posts' => 'App\post',
            'videos' => 'App\video',
        ]);

        return $this->morphTo();
    }
}

这是post函数模型:

class post extends Model
{
    public function comments(){

        Relation::morphMap([
            'posts' => 'App\post',
        ]);
        return $this->morphMany('App\comment','commentable');
    }
}
  

不要忘记添加此命名空间:

use Illuminate\Database\Eloquent\Relations\Relation;