Как узнать название страны по идентификатору?

У меня есть таблица, в которой я сохраняю свои записи идентификаторов языков ( language_skills_selected ). Теперь мне нужно получить имя для каждого предмета. Я сохранил имена в таблице language_skills .

Вот мои переменные и дд для всех:

$data['user_test'] = DB::table('language_skills_selected')->where('user_id', $id)->get();

Language: 22 - Level: Intermediate 

Language: 41 - Level: Beginner 

Language: 13 - Level: Expert 

Language: 35 - Level: Expert 

Language: 23 - Level: Intermediate 

И здесь у меня есть переменная с именами: $data['language_skills'] = AppLanguageSkill::lists('language_skill','id');

{"1":"Albanian","2":"Arabic","3":"Bengali","4":"Belarus","5":"Bulgarian","6":"Czech","7":"Chinese","8":"Korean","9":"Croatian","10":"Danish","11":"Hebraic","12":"English","13":"Estonian","14":"Finnish","15":"French","16":"German","17":"Greek","18":"Hindi","19":"Icelandic","20":"Italian","21":"Japanese","22":"Latvian","23":"Lithuanian","24":"Macedonian","25":"Hungarian","26":"Norwegian","27":"Dutch","28":"Persian","29":"Polish","30":"Portuguese","31":"Romanian","32":"Russian","33":"Serbian","34":"Slovak","35":"Slovene","36":"Spanish","37":"Swedish","38":"Thai","39":"Turkish","40":"Ukrainian","41":"Other"}

Таким образом, вместо этих идентификаторов, мне нужно иметь название языка - например: Language: Bulgarian - Level : Expert

Всего 3 ответа


Пожалуйста, попробуйте это

$data['user_test'] = DB::table('language_skills_selected')
     ->select("language_skills.language_skill")
     ->join("language_skills","language_skills_selected.language_skills","=","language_skills.id")
     ->where('language_skills_selected.user_id', $id)->get();

Соглашения об именах

Прежде всего, я бы изменил структуру, чтобы использовать обычные имена Laravel. Это также помогает другим лучше понять отношения в вашем столе.

Вы уже используете id качестве первичного ключа с автоинкрементом, и это хорошо. Если вы затем ссылаетесь на другую таблицу через внешний ключ, используйте имя таблицы единственного числа, за которым следует _id . Таким образом, ваша структура language_skills_selected становится

language_skills_selected
id int primary
user_id int внешний ключ (таблица пользователей)
language_skill_id int внешний ключ (таблица language_skills)

языковые навыки
id int primary
Строка name (имя единственного числа, так как в нем будет только одно имя)

Я бы переименовал столбец language_skills в name , поскольку имя таблицы уже предполагает, что каждая запись в таблице будет language_skill. Имя столбца должно быть более описательным, чем оно на самом деле содержит, в вашем случае столбец language_skills содержит имя. Так что тогда вы могли бы также назвать столбец таким образом.

Столы

В Laravel вы можете использовать Query Builder (см. Здесь ) для построения запросов или использовать Eloquent Models ( см. Здесь ). Я настоятельно рекомендую вам внимательно прочитать обе части документации. Это жизненно важная часть структуры и выбор того, когда использовать то, что зависит от вашего варианта использования.

Теперь, наконец, к вашему решению. Если вы изменили имена столбцов, вы можете написать оператор соединения между двумя таблицами следующим образом:

$data['user_test'] = DB::table('language_skills_selected')
    ->join('language_skills', 'language_skills_selected.language_skill_id', '=', 'language_skills.id')
    ->where('user_id', $id)
    ->get();

После этого вы получите объединенный результат, в котором вы также можете получить доступ к имени language_skill.

Я бы также посоветовал вам прочитать в целом больше о MySQL, так как это хорошая основа, ноу-хау, прежде чем погрузиться в каркас. Поиск MySQL присоединяется, и читать материал, как это .


Вы можете использовать этот код

1 -> query for Get All skills

$data['user_test'] = DB::table('language_skills_selected')->where('user_id', $id)->get();

2 -> Query For language_skills Name
$data['language_skills'] = AppLanguageSkill::where('id',$data['user_test']['language_skills])->get('language_skills');

3 -> Set Name instead of ID
$data['user_test']['language_skills'] = $data['language_skills'];


Вы можете использовать foreach Loop; Я предлагаю изменить имена переменных


Есть идеи?

10000