dzyfhuba / laravel-post-system
帖子、评论、点赞和回复。
dev-main
2022-02-10 16:45 UTC
Requires
- php: ^8.0
This package is auto-updated.
Last update: 2024-09-10 22:39:46 UTC
README
特性
- 帖子
- 评论
- 回复
- 点赞
⚠️ Laravel 6+
安装
使用composer require或在composer.json中添加。
composer require dzyfhuba/laravel-post-system
如果您使用SQL数据库服务器存储日志事件,您需要先运行迁移。MongoDB驱动不需要迁移。
php artisan migrate
使用方法
由于这是一个自定义包,并且您的模型应该有用户和数据库用户表。
基本使用
首先,将use Dzyfhuba\PostSys\Traits\HasPost特质添加到您的User模型中
use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Dzyfhuba\PostSys\Traits\HasPost; class User extends Authenticatable { use HasPost; // ... }
User
// Fetch the User $user = User::find(1); // get User Posts $posts = $user->posts; // get latest Posts $latestPosts = $user->latest_posts; // get Active Posts $activePosts = $user->active_posts; // get Active Posts $inactivePosts = $user->inactive_posts; // Post Count $postsCount = $user->posts_count; // Active Post Count $activePostsCount = $user->active_posts_count; // Inactive Post Count $inactivePostsCount = $user->inactive_posts_count; /** * Assgin or remove Post * Create or fetch the Post **/ use Dzyfhuba\PostSys\Models\Post; //Get the single Post or Post::find(1); $post = Post::create([ 'title'=> 'My First Post', 'description'=> 'This package will create posts, comments, likes, diskies and replies', 'status'=> 1, // default active(1) for inactive(0) ]); //Assign single Post $user->assignPost($post); //Assign multiple Post $user->assignPost([$post, $post2]); //Remove single Post $user->removePost($post); //Remove multiple Post $user->removePost([$post, $post2]); //Synchronize single Post $user->syncPosts($post); //Synchronize multiple Post $user->syncPosts([$post, $post2]);
帖子
use Dzyfhuba\PostSys\Models\Post; /** * Get all Posts * @return Array|Posts|Comments|Replies * Response all Posts with their comments and replies on each comment **/ $posts = Post::all(); /** * Fetch a single Post * @return Object|Posts, Array|Comments|Replies * Response Post with all comments and replies on each comment **/ $post = Post::find(1); // Create new Post $post = Post::create([ 'title'=> 'My First Post', 'description'=> 'This package will create posts, comments, likes, diskies and replies', 'status'=> 1, // default active(1) for inactive(0) ]); // Update Post $post->update(['title'=>'new text1']); // Boolean /** * Delete Post * @return Boolean * This will delete the Post as well as all comments & replies of that Post **/ $post->delete(); //Assign a Post to user $post->user()->associate($user)->save(); //Remove a Post $post->user()->dissociate()->save(); // First and Last Post for the User $post = $user->posts->first(); $post = $user->posts->last();
评论
/** * Get all Comments for the Post * @return Array|Comments|Replies * Response all comments and replies for the Post **/ $comments = $post->comments; /** * Add Comment to Post * @return Object|Comment with replies[] **/ $comment = $post->addComment("My First Comment", $user); /** * Add Comment to Post * @return Array|Comments|replies * Response all comments added to the post **/ $comments = $post->addAllComments("This is awesome package", $user); /** * Edit Comment to Post * @return Object|Comment with Array|replies * Response edited comment with replies **/ $comment = $comment->editComment("My Edit Comment" , $OptionalParamsStatus =1); /** * Delete Comment * @return Boolean * This will delete the Comment as well as all replies of that Comment **/ $comment->delete(); // First and Last Comment for the Post $comment = $post->comments->first(); $comment = $post->comments->last(); /** * Fetching a single comment * Get comment details **/ use Dzyfhuba\PostSys\Models\Comment; $comment = Comment::find(1); // OR $post->addComment("My First Comment", $user); $commentText = $comment->content; //comment content $commentDate = $comment->created_at; //comment created date $commentUpdate = $comment->updated_at; //comment updated date $commentedByUser = $comment->user; // commented user in Object
回复
/** * Get all Replies for the Comment * @return Array|Replies * Response all Replies for the Comment **/ $replies = $comment->replies; /** * Add Reply to Comment * @return Object|Reply **/ $reply = $comment->addReply("My First Reply", $user); /** * Add Reply to Comment * @return Array|Replies * Response all Replies added to the comment **/ $replies = $comment->addAllReplies("This is awesome package, I like reply feature.", $user); /** * Edit Reply to Comment * @return Object|Reply * Response edited reply **/ $reply = $reply->editReply("My Edit Reply" , $OptionalParamsStatus =1); /** * Delete Reply * @return Boolean * This will delete the Reply **/ $reply->delete(); // First and Last Reply for the Comment $reply = $comment->replies->first(); $reply = $comment->replies->last(); /** * Fetching a single reply * Get reply details **/ use Dzyfhuba\PostSys\Models\Reply; $reply = Reply::find(1); // OR $comment->addReply("My First Reply", $user); $replyText = $reply->content; //reply content $replyDate = $reply->created_at; //reply created date $replyUpdate = $reply->updated_at; //reply updated date $repliedByUser = $reply->user; // replied user in Object
Blade
也可以在Laravel Blade文件中使用。
@foreach ($posts as $post) <div> <h3>Post Id : {{ $post->id }}</h3> <p>Post title : {{ $post->title }}</p> <p>Post description : {{ $post->description }}</p> <p>Post status : {{ $post->status }}</p> <p>Post created date : {{ $post->created_at }}</p> <p>Post created by User : {{ $post->user->name }}</p> <p>Comments on Post: @foreach ($post->comments as $comment) <ul> <li>Comment : {{ $comment->content }}</li> <li>Comment created date: {{ $comment->created_at }}</li> <li>Comment created by User: {{ $comment->user->name }}</li> <li>Reply on comment : @foreach ($comment->replies as $reply) <ul> <li>Reply : {{ $reply->content }}</li> <li>Reply created date: {{ $reply->created_at }}</li> <li>Reply created by User: {{ $reply->user->name }}</li> </ul> @endforeach </li> </ul> @endforeach </p> </div> @endforeach
高级Eloquent模型
与 & withCount 一起使用
use Dzyfhuba\PostSys\Models\Post; $posts = Post::with('user')->where('user_id', 1)->first(); $user = User::with(['posts', 'active_posts', 'inactive_posts', 'latest_posts'])->withCount(['posts', 'active_posts', 'inactive_posts'])->get();