https://stackcoder.in/posts/localization-in-laravel-rest-api
Thursday, November 30, 2023
Tuesday, October 31, 2023
Vue js Lazy loading translations
//i18n-setup.js
import Vue from 'vue'
import VueI18n from 'vue-i18n'
import messages from '@/lang/en'
import axios from 'axios'
Vue.use(VueI18n)
export const i18n = new VueI18n({
locale: 'en', // set locale
fallbackLocale: 'en',
messages // set locale messages
})
const loadedLanguages = ['en'] // our default language that is preloaded
function setI18nLanguage (lang) {
i18n.locale = lang
axios.defaults.headers.common['Accept-Language'] = lang
document.querySelector('html').setAttribute('lang', lang)
return lang
}
export function loadLanguageAsync (lang) {
if (i18n.locale !== lang) {
if (!loadedLanguages.includes(lang)) {
return import(/* webpackChunkName: "lang-[request]" */ `@/lang/${lang}`).then(msgs => {
i18n.setLocaleMessage(lang, msgs.default)
loadedLanguages.push(lang)
return setI18nLanguage(lang)
})
}
return Promise.resolve(setI18nLanguage(lang))
}
return Promise.resolve(lang)
}
Monday, October 9, 2023
Wednesday, August 2, 2023
Sunday, July 2, 2023
Create KPI for user
// database/migrations/<timestamp>_create_cycles_table.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateCyclesTable extends Migration
{
public function up()
{
Schema::create('cycles', function (Blueprint $table) {
$table->id();
$table->date('start_date');
$table->date('end_date');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('cycles');
}
}
Saturday, June 3, 2023
Laravel Polymorphic Many-To-Many: Get All Related Records
In Laravel's many-to-many polymorphic relations, there is a situation where you can't get ALL records of different models by their "parent" record. Let me explain, and show the potential solution.
Scenario: you have multiple Models that each may have multiple tags.
Example Tags: "eloquent", "vue", "livewire"
And then each Post, Video, and Course may have many tags.
Our Task: get all records (Posts + Videos + Courses) by a specific tag.
Unfortunately, there's nothing like $tag->taggables()->get()
. You will see the solution for this below, but let's go step-by-step.
Here's the DB schema for this:
tags
id - integer
name - string
...
posts
id - integer
post_title - string
...
videos
id - integer
video_title - string
...
courses
id - integer
course_title - string
...
taggables
tag_id - `foreignId('tags')->constrained()`
taggable_id - integer (ID of post or video or course)
taggable_type - string (Model name, like "App\Models\Post")
The DB table taggables deserves its migration to be shown, it looks like this:
Then, in the Eloquent Models, you have this code.
app/Models/Post.php
Similarly, the Models of Course
and Video
will have the same identical tags()
method with morphToMany()
.
And then, if needed, the Tag model has multiple morphedByMany()
relations.
app/Models/Tag.php
Now, how to query data. How to get the entries by Tag?
Unfortunately, there's no way to run a single query, like $tag->taggables()->get();
, because there's no single Model structure for different Post/Video/Course, they all have different fields, so how you can group them together?
Well, the trick is to run three different queries, but then combine the results into an identical structure and merge them together into one Collection. From there, you can paginate or transform that collection however you want.
This code will return this structure, if there is a Post/Video for the tag but no Course:
-
Composer is a major part of the Laravel MVC Framework, but it also exists without Laravel. In fact you could use it in any project. This a...
-
How to Answer Technical Questions Like a Pro Answering technical interview questions is all about showing off your problem-solving skills an...
-
Vuetify is a popular UI framework for Vue apps. In this article, we’ll look at how to work with the Vuetify framework. Color Picker Inputs W...