Как узнать название страны по идентификатору? - PullRequest
1 голос
/ 15 января 2020

У меня есть таблица, в которой я сохраняю свои записи идентификаторов языков (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'] = \App\LanguageSkill::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 ]

1 голос
/ 15 января 2020

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

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

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

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

language_skills
id int primary
name string (имя единственного числа, поскольку в нем будет только одно имя)

Я бы переименовал столбец 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, так как это хорошая основа, ноу-хау, прежде чем погрузиться в рамки. Lookup MySQL присоединяется и читает материал вот так .

1 голос
/ 15 января 2020

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

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'] = \App\LanguageSkill::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; Я предлагаю изменить имена переменных

1 голос
/ 15 января 2020

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

$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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...