Comments (9)
Here is a cleaner method which use Laravel’s Str class for pluralization:
public function scopeTranslated($query)
{
$translationTable = str_plural(snake_case(class_basename($this->getTranslationModelName())));
$query->select()
->addSelect($this->getTable() . '.id as id')
->where('locale', App::getLocale())
->join(
$translationTable,
$this->getTable() . '.id',
'=',
$translationTable . '.' . $this->getRelationKey()
);
return $query;
}
from laravel-translatable.
I'm afraid you will have to use a join method.
from laravel-translatable.
Okay, i was hoping i could replace that code with something cleaner, but if there is nothing, maybe you should include this in laravel-translatable?
Here is my function, is there a way to make it infer the model name? Right now i have to use it like this
Category::translated('Category')->orderBy('name')->get();
public function scopeTranslated($query, $model) {
$model = preg_replace('/([A-Z])/', '_$1', $model);
$model = strtolower($model);
if (substr($model, 0, 1) == '_')
$model = substr($model, 1);
$pos = strrpos($model, 'y');
if ($pos == strlen($model) - 1)
$model_plural = substr_replace($model, 'ie', $pos, strlen($model));
else
$model_plural = $model;
return $query->join($model.'_translations', $model_plural.'s.id', '=', $model.'_translations.'.$model.'_id')->where($model.'_translations.locale', '=', App::getLocale());
}
from laravel-translatable.
Ouch… give me five minuts…
from laravel-translatable.
Very nice, Ill test it later today. In my defense the code was written in a hurry :)
from laravel-translatable.
Yeah, give me feedback as I didn’t test this method a lot.
from laravel-translatable.
Seems to be working in all my uses cases. Thanks a lot for your help, PHP isn't my native language as you probably noticed :)
Definitely think this should be included in the package.
from laravel-translatable.
You could also use a more simple syntax because laravel already has this functionality:
Get translated records only
$countries = Country::has('translations')->get();
Get translated records in specific locale
$locale = 'en';
$countries = Country::whereHas('translations', function($q) use ($locale)
{
$q->where('locale', '=', $locale);
})->get();
from laravel-translatable.
Scope added for version 5!
from laravel-translatable.
Related Issues (20)
- Add Laravel 5.8 support HOT 1
- Saving in translated model instead of saving in original model HOT 4
- Fetching Model by translated field and determine locale HOT 3
- Extra Fields or Properties For Translated Text HOT 2
- Can't translate to Portuguese HOT 3
- Display translated attribute even if no translation for current locale and fallback locale? HOT 3
- Has this package a possibility to get translations of related models HOT 2
- Ability to save in both languages HOT 8
- ID coming back with different data HOT 4
- Query where locale not working properly HOT 2
- What would be the best way to handle admin panel with translations? HOT 4
- how i can custom $translatedAttributes from outside model HOT 2
- Multiple Databases HOT 2
- Fallback to default locale with numeric field is not working as expected HOT 3
- get all and Fallback if translation is missing #23 HOT 2
- Wrong column name HOT 2
- Problem with relations HOT 3
- Prefix for default language HOT 6
- When I change local I don't get the translation HOT 7
- how to change the category translation on the fly? HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from laravel-translatable.