通过变形名称和外键的Laravel多态关系负载模型

时间:2019-03-25 14:02:22

标签: laravel eloquent polymorphism

我试图使用morphname键为可注释模型(通过使用多态关系创建)创建注释。

例如;我想创建一个注释,给出变形名称(blog)和foreign_key(1)。但是变形名称可能会改变。因此,我们不知道请求中可以包含哪个键。我不想为每种资源创建操作。

AppServiceProvider:

String agentID = parameterJson.getObject("agentid").toString();

控制器->操作:

Relation::morphMap([
    'blog' => \App\Models\Blog\BlogPost::class,
    'product' => \App\Models\Commerce\Product::class,
]);

可评论的关系:

$this->validate($request, [
    'commentable_model' => 'required|string',
    'commentable_id' => 'required|integer|min:1',
    'comment' => 'required|string'
]);

// i am trying to load data using morph name and foreign key here; but it's not working.
$model = $request->commentable_model::findOrFail($request->commentable_id);

$comment = new Comment;
$comment->comment = $request->comment;
$comment->commentable()->associate($model);
$comment->user()->associate(auth('api')->user());
$comment->save();

数据:

  

commentable_model =>'博客',   commentable_id => 1

我将通过api端点发送这些数据。因此,我只想使用morhpnames,而不使用完整的类名。

我无法正常工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,实际上它一直在我的眼前……

我们正在使用Relation类进行映射。

我检查了是否可以使用任何方法或变量访问该关系,答案是肯定的。

简短的答案是;

Relation::$morphMap

将所有映射返回为数组。

我对这个问题的解决方案是;

$model = Relation::$morphMap[$request->commentable_model]::findOrFail($request->commentable_id);

使用我们给定的词法名称(博客)访问该数组值。