I have made a create post function and I would like to make a certain section only have a featured post. I'm new to laravel and php so was not to sure how to do it. I created a featured column in my db and passed a foreach($posts as $featured) into the section I wanted featured. From my research, the idea I saw was to toggle between a default value of "0" and a featured value of "1". Not sure where to go from there
EDIT: using the ->default(0) and re-running the migration did the trick. Now the question is how I can toggle between 0 and 1
Route:
// Store Listing Data
Route::post('/posts', [PostsController::class, 'store']);
Posts Controller (Create function):
public function store(Request $request) {
$formFields = $request->validate([
'title' => 'required',
'sub_title' => 'nullable',
'tags' => 'required',
'content' => 'required',
'featured' => 'nullable',
]);
Posts::create($formFields);
return redirect('/');
}
Posts Model
protected $fillable = ['title', 'sub_title', 'tags', 'content','featured'];
CodePudding user response:
You are on a right way! Your column must be tinyint
and it will accept values of 1
and 0
. 1
means the post is featured and 0
means its a normal post. Your migration must look like this
Schema::create('posts', function (Blueprint $table) {
$table->id();
// ...
$table->tinyInteger('featured')->default(0);
// ...
$table->timestamps();
});
Now when you insert a post it will be automatically inserted as a normal post
. If you want the post to be inserted as featured you must declare it while inserting the post like this:
Post::create([
'title' => 'My first post',
'sub_title' => 'I am so glad I published this post',
'tags' => 'first_post , so_glad',
'content' => 'My first post contents',
'featured' => 1 // THIS MEANS THE POST WILL BE FEATURED
]);
And then whenever you want to retrieve all featured posts you can do
Post::where('featured', 1)->get();
That's it! Now you listed all the featured posts!