我有post
模型,user
模型和point
模型。
每当用户发布新帖子时,他们都会添加一个点(点数表中的新行)。
我为每个模型设置了控制器。
添加帖子后应该/如何从PointsController@store
拨打PostsController@store
?
或者这是错误的方法吗?
答案 0 :(得分:0)
考虑使用模态。
例如,在PointsController
:
public function store() {
// your code
User::addPoint(); // this is responsible for adding the point
}
在PostsController
public function store() {
// your code
User::addPoint(); // call this again
}
这样,您就有了一个负责更新帖子的模型。
答案 1 :(得分:0)
选项1:使用模型
在PostController中
public function store(Request $request){
\Auth::user()->post()->create($request->all());
\Auth::user()->points()->create['point'=> 1]; // add your columns here
}
点模型
protected $fillable = ['point']; //add here list of columns you want to use on \Auth::user()->points->create['point'=> 1];
选项2:使用观察者
像这里创建一个观察者类。我会在app /
中创建一个Observers文件夹https://laravel.com/docs/5.5/eloquent#observers
称之为PostObserver
在postObserver中的创建方法:
public function created(Post $post)
{
$post->user()->points()->create['point'=> 1]; // [column1=>value1, column2=>value2]
}
点模型
protected $fillable = ['point']; //add here list of columns you want to use on \Auth::user()->points->create['point'=> 1];
在方法启动中的AppServiceProvider中添加
public function boot()
{
Post::observe(PostObserver::class);
}
不要忘记添加正确的命名空间,然后在AppServiceProvider中添加使用Observers \ PostObserver