У меня есть таблица, в которой я сохраняю свои записи идентификаторов языков ( 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; Я предлагаю изменить имена переменных