首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在多态(laravel 6)中保存id和模型?

如何在多态(laravel 6)中保存id和模型?
EN

Stack Overflow用户
提问于 2019-11-22 13:06:26
回答 2查看 207关注 0票数 1

我试着用这些来保存我的评论:

代码语言:javascript
复制
class Comment extends Model
{
    public function commentable()
    {
        return $this->morphTo();
    }
}

代码语言:javascript
复制
class Review extends Model
{
    public function comments()
    {
        return $this->morphMany(Comment::class, 'commentable');
    }

}

路线:

代码语言:javascript
复制
Route::get('/reviews', 'front\ReviewController@Holder')->name('ReviewHolder');
Route::get('/reviews/{slug}', 'front\ReviewController@index')->name('Review');
Route::post('/reviews', 'front\ReviewController@Sendcm')->name('SendComment');

我的控制器:

代码语言:javascript
复制
class ReviewController extends Controller
{
    public function Holder(){
        $reviews = Review::latest()->with('partners')->paginate(6);
        return view('front.review.holder.main', compact('reviews'));
    }

    public function index($slug){
        $item = Review::where('slug','=', $slug)->with('partners')->first();
        return view('front.review.main.main',compact('item'));
    }

    public function Sendcm(Request $request){
        $review = Review::find($id);
        $comment = new Comment;
        $comment->name = $request->name;
        $comment->email = $request->email;
        $comment->body = $request->body;
        $review->comments()->save($comment);
        return redirect()->back();

    }
}

但我无法保存注释并向我显示错误

未定义变量: id

如何从我的刀片中找到id和模型,或者以另一种方式保存注释?我试着:

代码语言:javascript
复制
public function Sendcm(Request $request, $slug){
$review = Review::find($slug);
$comment = new Comment;
.
.
.}

但错误是:

函数App\Http\Controllers\front\ReviewController::Sendcm(),1传递的

参数太少,而预期的

值正好是2

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-22 17:10:49

在Controller中,我将上面的答案稍微更改为:

代码语言:javascript
复制
public function Sendcm(Request $request, $slug){
        $review = Review::find($slug);
        $comment = new Comment;
        $comment->name = $request->name;
        $comment->email = $request->email;
        $comment->body = $request->body;
        $review->comments()->save($comment);
        return redirect()->back();
    }

代码语言:javascript
复制
{!! Form::open(['url' => route('send_comment', $item->id), 'method' => 'POST']) !!}

以及通往下列地点的路线:

代码语言:javascript
复制
Route::post('/reviews/{review}', 'front\ReviewController@Sendcm')->name('send_comment');

A现在它正在工作,但在注释表中没有“App\”保存commentable_type

票数 0
EN

Stack Overflow用户

发布于 2019-11-22 13:39:56

未定义变量$id是因为函数不知道$id来自何处。一个选项是将review模型作为第二个参数注入,如下所示:

代码语言:javascript
复制
public function Sendcm(Request $request, Review $review){
  $review = Review::find($slug); //you can get rid of this.
  $comment = new Comment;
  .
}

然后按如下方式更新您的路线:

代码语言:javascript
复制
Route::post('/reviews/{review}', 'front\ReviewController@Sendcm')->name('SendComment');

Laravel将自动为您提供与您发布的id相关的审查模型。

第二个示例中的错误是因为您没有更新路由以接受第二个参数。您本可以通过如下方式更新您的路由来避免此错误:

代码语言:javascript
复制
Route::post('/reviews/{slug}', 'front\ReviewController@Sendcm')->name('SendComment');

另外,最好遵循PSR标准和Laravel的命名约定。在这方面,最好在命名路线时使用带有点符号的蛇案例。所以,SendCommentreviews.send_comment更好

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58994921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档