成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Laravel 5.4 入門(mén)系列 8. 文章評(píng)論

IntMain / 1570人閱讀

摘要:編輯遷移文件我們?yōu)楸砀裉砑恿送怄I,同時(shí)生定義了約束,該約束允許刪除父表文章的時(shí)候,自動(dòng)刪除關(guān)聯(lián)的子表評(píng)論。關(guān)聯(lián)中文文檔的輔助函數(shù)列表中文文檔

本節(jié)將學(xué)習(xí) Eloquent Relations,表與表之間存在著多種關(guān)系,舉例如下:

一對(duì)一:文章與作者

一對(duì)多:文章與評(píng)論

多對(duì)多:標(biāo)簽與文章

文章與評(píng)論的一對(duì)多關(guān)系

一對(duì)多關(guān)系,主要理解兩點(diǎn):

如何實(shí)現(xiàn)一對(duì)多關(guān)系

實(shí)現(xiàn)了之后能給開(kāi)發(fā)帶來(lái)什么便利

一對(duì)多關(guān)系實(shí)現(xiàn)

首先創(chuàng)建 comments 相關(guān):

$ php artisan make:model Comment -mc

同樣,為了遵循以前的約定,把生成的 CommentController 改成復(fù)數(shù)形式。

編輯遷移文件:

/database/migrations/2017_04_15_062905_create_comments_table.php
public function up()
{
    Schema::create("comments", function (Blueprint $table) {
        $table->increments("id");
        $table->unsignedInteger("post_id");
        $table->string("body");
        $table->timestamps();

        $table->foreign("post_id")
          ->references("id")
          ->on("posts")
          ->onDelete("cascade");
    });
}

我們?yōu)?comments 表格添加了 post_id 外鍵,同時(shí)生定義了 onDelete cascade 約束,該約束允許刪除父表(文章)的時(shí)候,自動(dòng)刪除關(guān)聯(lián)的子表(評(píng)論)。

最后,執(zhí)行遷移:

$ php artisan migrate

接下來(lái),我們就可以定義文章與評(píng)論的一對(duì)多關(guān)系了:

/app/Post.php
public function comments()
{
    return $this->hasMany(AppComment::class);
}

comments 方法中,我們并沒(méi)有指定對(duì)應(yīng)的外鍵,這是因?yàn)槲覀冊(cè)诙x遷移的時(shí)候,嚴(yán)格按照約定 (posts_id),因此 Laravel 會(huì)去自動(dòng)尋找對(duì)應(yīng)的外鍵。::class 方法也可以寫(xiě)成:

return $this->hasMany("AppComment");
一對(duì)多關(guān)系的作用

定義好了文章與評(píng)論的一對(duì)多關(guān)系之后,我們就可以方便的進(jìn)行相關(guān)操作了,先來(lái)練習(xí)下:

$ php artisan tinker

為了方便操作,我們先允許評(píng)論內(nèi)容 body 字段批量賦值:

/app/Comment.php
protected $fillable = ["body"];

首先是根據(jù)文章來(lái)直接創(chuàng)建評(píng)論:

>>> $post = AppPost::first()
>>> $post->comments()->create(["body"=>"評(píng)論1"])
>>> $post->comments()->create(["body"=>"評(píng)論2"])

可以發(fā)現(xiàn),我們可以根據(jù)文章的實(shí)例來(lái)直接創(chuàng)建對(duì)應(yīng)的評(píng)論,而且不需要去確定評(píng)論post_id 字段。

創(chuàng)建好之后,我們可以方便的獲取文章的評(píng)論:

>>> $post->comments;

我們傳入的是 comments 屬性而不是方法,Laravel 會(huì)返回該文章對(duì)應(yīng)評(píng)論的集合,比如我們可以將其轉(zhuǎn)化為其他格式:

>>> $post->comments->toJson()

當(dāng)然了,也可以使用 comments() 方法返回 Eloquent 模型,再進(jìn)行進(jìn)一步操作:

>>> $post->comments()->get()->toArray()
>>> $post->comments()->pluck("body")

同樣的,如果我們要根據(jù)評(píng)論來(lái)操作相關(guān)文章,我們需要先定義評(píng)論與文章的多對(duì)一關(guān)系:

/app/Comment.php
public function post()
{
    return $this->belongsTo(AppPost::class);
}

重啟 tinker

>>> $comment = AppComment::first()
>>> $comment->post;
>>> $comment->post->title;
評(píng)論的顯示與創(chuàng)建 顯示評(píng)論

顯示評(píng)論,比較簡(jiǎn)單,直接使用 `Bootstrap 的 card 模板即可:

/resources/views/posts/show.blade.php

{{ $post->title }}

{{$post->body}}

@foreach ($post->comments as $comment)
{{$comment->created_at->diffForHumans() }}

{{ $comment->body }}


@endforeach

同時(shí),我們使用了 CarbondiffForHumans 方法,用來(lái)顯示「距離現(xiàn)在多久」。

創(chuàng)建評(píng)論

最后是評(píng)論的創(chuàng)建,首先是視圖,放在顯示評(píng)論下方即可:

/resources/views/posts/show.blade.php
添加評(píng)論
{{ csrf_field() }}

對(duì)應(yīng)的路由:

Route::post("/posts/{post}/comments","CommentsController@store");

最后是控制器:

validate(request(),[
            "body" => "required|min:5"
            ]);
            
       $post->addComment(request("body"));
       return back();
    }
}

首先,依舊是使用路由模型的自動(dòng)綁定功能,然后將添加評(píng)論的方法進(jìn)行封裝,方便重復(fù)使用:

/app/Post.php
public function addComment($body)
{
    $this->comments()->create(compact("body"));
}

最后使用輔助方法 back(),該方法生成一個(gè)重定向響應(yīng)讓用戶(hù)返回到之前的位置。


Eloquent: 關(guān)聯(lián) | Laravel 5.4 中文文檔

Cards · Bootstrap

Laravel 的輔助函數(shù)列表 | Laravel 5.4 中文文檔

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22749.html

相關(guān)文章

  • Laravel 5.4 入門(mén)系列 9. 注冊(cè)與登錄,用戶(hù)關(guān)聯(lián)

    摘要:本節(jié)將實(shí)現(xiàn)文章評(píng)論與用戶(hù)關(guān)聯(lián)的功能。關(guān)系定義首先修改與表,增加字段增加全部回滾并重新執(zhí)行遷移添加用戶(hù)表與文章表評(píng)論表的一對(duì)多關(guān)系添加文章評(píng)論表與用戶(hù)表的多對(duì)一關(guān)系同時(shí),評(píng)論表的字段增加。同時(shí),我們還自定義了返回的錯(cuò)誤信息。 本節(jié)將實(shí)現(xiàn)文章、評(píng)論與用戶(hù)關(guān)聯(lián)的功能。 關(guān)系定義 首先修改 posts 與 comments 表,增加 user_id 字段 /database/migratio...

    smallStone 評(píng)論0 收藏0
  • Laravel 5.4 入門(mén)系列 10.文章歸檔

    摘要:將上述的一系列查詢(xún)進(jìn)行封裝模型到了這一步,我們基本上實(shí)現(xiàn)了文章歸檔的功能。但是有一個(gè)問(wèn)題,文章歸檔實(shí)際上包括在通用視圖中,這就意味著,網(wǎng)站的所有請(qǐng)求都需要返回,否則就會(huì)報(bào)錯(cuò)。數(shù)據(jù)庫(kù)之?dāng)?shù)據(jù)庫(kù)請(qǐng)求構(gòu)建器中文文檔的視圖功能中文文檔 首先,要實(shí)現(xiàn)的是按照日期來(lái)統(tǒng)計(jì)文章,原始的 SQL 如下: select year(created_at) year, monthname(c...

    Nekron 評(píng)論0 收藏0
  • Laravel 5.4 入門(mén)系列 7. 文章的顯示

    摘要:為的輔助方法,用于截取字符串的前個(gè)字符,然后返回前個(gè)字符加的格式。顯示某篇文章顯示某篇文章的比較簡(jiǎn)單,路由注意要放在下面,假如這樣那么,我們?cè)L問(wèn)的時(shí)候,會(huì)被當(dāng)成是的查詢(xún)參數(shù)。 文章的顯示功能比較簡(jiǎn)單,分為兩部分: 文章列表 具體的某篇文章 顯示文章列表 路由之前已經(jīng)定義好: Route::get(/posts,PostsController@index); 控制器: public ...

    kuangcaibao 評(píng)論0 收藏0
  • Laravel 5.4 入門(mén)系列 6. 文章的創(chuàng)建

    摘要:基本功能創(chuàng)建文章的第一步是用戶(hù)發(fā)請(qǐng)求,然后返回創(chuàng)建文章的頁(yè)面。實(shí)際上,會(huì)報(bào)錯(cuò)添加保護(hù)雖然我們完成了基本功能,但是提交請(qǐng)求的時(shí)候還是會(huì)報(bào)錯(cuò),其實(shí)這是防止攻擊。假如違反了規(guī)則,錯(cuò)誤信息會(huì)自動(dòng)被保存在閃存的中,即只對(duì)下一次請(qǐng)求生效。 基本功能 創(chuàng)建文章的第一步是用戶(hù)發(fā)請(qǐng)求,然后返回創(chuàng)建文章的頁(yè)面。 路由:處理用戶(hù)「創(chuàng)建文章」的請(qǐng)求 /routes/web.php Route::get(/po...

    levius 評(píng)論0 收藏0
  • Laravel 5.4 入門(mén)系列 3. 任務(wù)列表顯示

    摘要:熟悉了路由與視圖的基本操作之后,我們來(lái)讓視圖顯示一個(gè)任務(wù)列表吧。創(chuàng)建遷移現(xiàn)在,我們就可以創(chuàng)建一個(gè)用來(lái)生成任務(wù)表的遷移了。 熟悉了路由與視圖的基本操作之后,我們來(lái)讓視圖顯示一個(gè)任務(wù)列表吧。主要知識(shí)點(diǎn): 數(shù)據(jù)遷移 查詢(xún)構(gòu)造器 數(shù)據(jù)庫(kù) 創(chuàng)建數(shù)據(jù)庫(kù) 首先創(chuàng)建一個(gè)數(shù)據(jù)庫(kù): $ mysql -uroot -p mysql> create database laratasks; 數(shù)據(jù)庫(kù)配置 La...

    SunZhaopeng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<