[英]Laravel attach returns undefined method for belongsToMany relationship
我想提出一个包含很多调查的问题。 在问题模型中:
public function surveys()
{
return $this->belongsToMany(Survey::class, 'survey__surveyquestions');
}
并在控制器中保存新问题时:
private $questions;
public function __construct(QuestionsRepository $questions)
{
parent::__construct();
$this->questions = $questions;
}
public function store(Request $request)
{
$this->questions->create($request->all());
$this->questions->surveys()->attach($request->surveys);
return redirect()->route('admin.survey.questions.index')
->withSuccess(trans('core::core.messages.resource created', ['name' => trans('survey::questions.title.questions')]));
}
但是当它到达附加行时出现以下错误:
(1/1)FatalErrorException调用未定义的方法Modules \\ Survey \\ Repositories \\ Eloquent \\ EloquentQuestionsRepository :: surveys()
我注意到该错误提到了EloquentQuestionsRepository
但是我没有在其中添加任何方法,因此它只是一个空类:
class EloquentQuestionsRepository extends EloquentBaseRepository implements QuestionsRepository
{
}
QuestionRepository:
interface QuestionsRepository extends BaseRepository
{
}
如对主要帖子的答复所述,构造函数将QuestionsRepository
解析为EloquentQuestionsRepository
实例,从外观上看,这并不是store
方法所需要的。
我可能要做的就是直接在模型上调用create
方法并一起删除构造函数-除非您在控制器中的其他任何位置都需要QuestionsRepository
实例:
public function store(Request $request)
{
$question = Question::create($request->all());
$question->surveys()->attach($request->surveys);
...
}
另外-我不确定通过$request->all()
是最好的做法-我可能会使用$request->only(...)
或$request->all(...)
指定您想从请求中获取的项目,而不是将请求中的所有内容传递给create
方法。
另一方面,您也可以使用Form Request
,它将在将数据传递给store
方法之前为您验证数据。
https://laravel.com/docs/5.5/validation#form-request-validation
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.