我使用eloquent作为具有超薄框架(https://www.slimframework.com/docs/cookbook/database-eloquent.html)
的独立模块我的问题是 - 我可以提供多态关系" morphMap"设置?
答案 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)
您应该在morphMap
或morph
中定义的每个函数中定义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;